忽略表达式中的可选前缀

Ignore an optional prefix in expression

如何获取可选前缀后的字符串?示例:

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

[...]为选填部分

显然,我需要一个环视断言。但我不知道把它设为可选。

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

您可以尝试 this.See 演示。

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

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

查看演示。

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

这是对@Maroun 的正则表达式的修改,使 [...] 可选:

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

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

请注意我如何将第一部分放在 非捕获组 中,并在组后使用 ? 使其成为可选的。

最简单的方法是使用

[^\[\]]*$

匹配除括号外的任意数量的字符,直到字符串结束。不过,它也会匹配 ][]sd[][xxx 中的 xxx,所以如果您需要验证字符串的结构,这个正则表达式不够具体。