正则表达式中负超前运算符的问题

时间:2019-07-03 09:26:59

标签: regex

我有一个字符串==a==123==b==456==c==879,我想获取字母和数字。

我尝试使用expr ==(.*?)==(.*?)

这给了我

 Match 1
    1.  a
    2.   
    Match 2
    1.  b
    2.   
    Match 3
    1.  c
    2.   

...但是缺少数字。我怎样才能得到它们?

我想得到这个: 这给了我

Match 1
1.  a
2.  123
Match 2
1.  b
2.  456
Match 3
1.  c
2.  789

我相信我必须使用一个负的超前运算符,但是我不知道在这种情况下它是如何工作的。

(仅在此示例中,字母和数字分开。实际上,我只能用==分开。)

1 个答案:

答案 0 :(得分:1)

您可以使用以下命令让正则表达式匹配==或字符串末尾

==(.*?)==(.*?)(?===|$)
==([\s\S]*?)==([\s\S]*?)(?===|$) # To also match line breaks in between ==
(?s)==(.*?)==(.*?)(?===|$)       # Also matches line breaks in between == in PHP and many other flavors but Ruby
(?m)==(.*?)==(.*?)(?===|\Z)      # To also match line breaks in between == in Ruby

请参见regex demoregex graph

enter image description here

详细信息

  • ==-两个=字符的字符串
  • (.*?)-第1组:除换行符以外的任何0个或多个字符,并且尽可能少
  • ==(.*?)-==和第2组匹配除换行符以外的任何0个或多个字符,且尽可能少
  • (?===|$)-正向超前,需要==或当前位置右边的字符串结尾。