将2个正则表达式规则合并为一个

时间:2013-06-28 21:04:18

标签: regex

是否有特殊字符可以加入正则表达式中的规则组

我需要匹配前两个字符和每行中的最后一个数字

这匹配前2个字符

(^..) 

这匹配最后2个数字

([0-9][0-9]$)

如何加入这2条规则? 试图取得成功

(^..)([0-9][0-9]$)

4 个答案:

答案 0 :(得分:4)

你需要匹配两者之间的部分。只允许任意多个任意字符:

(^..).*([0-9][0-9]$)

请注意,大多数风格.与换行符不匹配。如果您的输入可能包含换行符,请使用s(“单行”或有时“dotall”)修饰符来更改.的含义。否则(即在JavaScript中)使用[\s\S]*

另请注意,连续使用两个正则表达式可能更容易,更具可读性和更高效:

^..
[0-9][0-9]$

无需分组/捕获和重复。

修改

请注意,这两者并不完全等效。第一个字符至少需要四个字符(因为..匹配的两个字符不能再由[0-9][0-9]匹配),而第二个字符只能包含两个数字(在这种情况下..会匹配那些相同的数字)。这取决于您正在寻找的这些语义中的哪一个。第三个只使用一个正则表达式但相当于两个正则表达式解决方案的解决方案将使用前瞻:

^(?=(..))(?=.*([0-9][0-9])$)

这样您就可以匹配x12,第一次捕获为x1,第二次捕获为12

感谢Alan Moorepointing this out

答案 1 :(得分:1)

您需要添加anything goes here - 也称为。*

(^..).*([0-9][0-9]$)

答案 2 :(得分:0)

(^..).*([0-9][0-9]$)

您可以使用。*修饰符来匹配“介于两者之间的所有内容”

答案 3 :(得分:0)

如果行包含“前两个”和“后两个”之间的其他字符,那么你需要正则表达式中的某些内容来匹配插入的字符;类似的东西:

(^..).*([0-9][0-9]$)