条件匹配PCRE正则表达式:各种大小的lookbehind如何?

时间:2013-10-22 09:13:49

标签: regex pcre

我尝试匹配一个简单的模式P1(空格或制表符,然后##然后是文本):

[ \t]*##\S*

但有时,我想与另一个模式P2(无论是空格还是制表符,然后是##然后是文本)匹配:

[^ \t]*##\S*
当## \ S *跟随\ S *

时,必须使用

P2

否则必须使用P1

预期匹配结果的示例:

##foo
must give
##foo

      ##foo (6 whitespaces before pattern)
must give
      ##foo (because there is some whitespaces before the pattern ##foo and not any non-whitespace characters)

foo   ##bar
must give
##bar (because there is some non-whitespace charecters before the pattern ##foobar)

foo bar   ##foobar
must give
##foobar

我尝试了lookbehind方法,但这是不可能的,因为没有固定的大小。

如果有人能帮助我,那将是非常好的......

1 个答案:

答案 0 :(得分:1)

您可以实现使用捕获组后的效果:

^(\s*##\S*)|^\S+\s*(##\S*)

然后像

     ## foo

将与第一个替代匹配,结果可以从第一个捕获组获得,而

foo  ## bar

将与第二个备选方案匹配,“## bar”可以从第二个捕获组获得。