2015-02-09 55 views
0

如何在可選的前綴之後獲取字符串?示例:忽略表達式中的可選前綴

Expression Result 
------------------------ 
[asdf]xxx => xxx 
[foo]bar => bar 
[]bla  => bla 
test  => test 

[...]是可選部分。

顯然,我需要一個環視聲明。但我不知道讓它成爲可選項。

+0

'\ [。*?\](。*)',第一組是你想要的,實現取決於你的語言 – Maroun 2015-02-09 09:48:13

+0

@MarounMaroun:這不會使''可選...' – 2015-02-09 09:50:11

+0

您正在使用哪種正則表達式引擎? Lookaround並不完全支持大多數引擎。 – 2015-02-09 09:51:08

回答

4

這是一個修改@ Maroun的正則表達式使得[...]可選:

(?:\[.*?\])?(.+) 

https://regex101.com/r/hM2sK8/1

注意我是如何把第一部分在非捕獲組和在團隊之後,可以選擇?

2
(?:\[[^\]]*\]\K)?.+$ 

你可以試試看。

https://regex101.com/r/wX9fR1/14

\[[^\]]*\](*SKIP)(*F)|.+$ 

觀看演示。

https://regex101.com/r/wX9fR1/15

+1

仍捕捉'[]' – funkwurm 2015-02-09 09:50:44

+0

@funkwurm現在不在 – vks 2015-02-09 09:54:48

+0

@vks'[[^ \]] * \]之間的部分'我對此有所疑惑?這種輸出很容易通過'(?:\ [。* \] \ K)?。+'獲得。你能解釋一下代碼的一部分嗎?[[^ \]] * \]主要是我對代碼中的'^'字符感到困惑? – mkHun 2015-02-10 04:26:28

1

最簡單的方法是使用

[^\[\]]*$ 
它匹配除了括號直到字符串的末尾任何數量的字符

。不過,它也會匹配xxx,][]sd[][xxx,所以如果你需要驗證字符串的結構,這個正則表達式不夠具體。

+0

我同意。這通過了所有顯示的測試用例,並且不需要(各種支持)查看。 (我也會這樣回答,但是蒂姆把我拉出來了!) – Bohemian 2015-02-09 09:56:39