1

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

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

这匹配前 2 个字符

(^..) 

这匹配最后 2 个数字

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

如何加入这两条规则?试过没有成功

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

4 回答 4

4

好吧,您还需要匹配两者之间的部分。只允许任意多个任意字符:

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

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

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

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

无需分组/捕获和重复。

编辑:

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

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

这将允许您匹配x12,第一个捕获是x1,第二个是12

感谢Alan Moore指出这一点。

于 2013-06-28T21:05:53.203 回答
1

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

(^..).*([0-9][0-9]$)
于 2013-06-28T21:06:24.323 回答
0
(^..).*([0-9][0-9]$)

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

于 2013-06-28T21:07:15.937 回答
0

如果该行在“前两个”和“后两个”之间包含其他字符,那么您将需要正则表达式中的某些内容来匹配中间字符;就像是:

(^..).*([0-9][0-9]$) 
于 2013-06-28T21:07:30.517 回答