2015-02-09 56 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