如何根据表达式的优先级匹配正则表达式?

时间:2012-10-18 16:47:53

标签: regex

如果我有以下数据:

abc1dogs
a1cat2dogs
turtles

我希望在“1”和“2”之后提取所有文本,或者如果该行不包含“1”或“2”?需要使用的附加规则是,如果记录中存在“1”和“2”,那么我只想要提取“2”之后的值。我尝试使用:

(?<=[12])(.*)

接近但它又回来了:

dogs
cat2dogs

我希望它返回的是:

dogs
dogs
turtles

2 个答案:

答案 0 :(得分:2)

这个略显臃肿的PCRE正则表达式引擎:

(?<=2).*|(?<=1)[^2]*$|^[^12]*$

确保(如果找到1)字符串的其余部分不包含2 s。同样,如果要匹配整个字符串,则字符串中不允许12

答案 1 :(得分:0)

简单

[^12\n]*$

像这样测试:

enter image description here