我们这里有一个很奇怪的字符串:
re'\gfby by A »;ŸÎ \ l o l l i . p o p - c o l \ n t u s e r . d a t dŸŸœ~®ã€º &¹UÚÂdŸŸœ~®ã€º &¹UÚ eŸŸœ~®ã€º &¹UÚÂrmtmÖpïJÔ
我们想找到
l o l l i . p o p
因此,我们要查找字符串中的第一个"."
,然后将点的所有内容都保留下来,直到遇到以下任何一种情况:
点的所有规则都相同,这是另一个测试用例:
\ n t u s e r . d a t dŸŸœ~®ã€º
应该返回
n t u s e r . d a t
我们正在尝试用这种表达方式进行环视:
(?<=\\|\s\s)(\.)(?=\\|\s\s)
我们还对此进行了试验:
(\\|\s\s|-)(.*?)(\.)(.*?)(\\|\s\s|-)
此表达式的问题在于regex首先查看左手参数并将其与字符串中最早的匹配项匹配,我们希望regex开始查看。然后向左/向右走,直到碰到我们的休息之一。
谢谢!
答案 0 :(得分:0)
在
re'\gfby by A »;ŸÎ \ l o l l i . p o p - c o l \ n t u s e r . d a t dŸŸœ~®ã€º &¹UÚÂdŸŸœ~®ã€º &¹UÚ eŸŸœ~®ã€º &¹UÚÂrmtmÖpïJÔ
这个
(?:(?! )[^\\.-])+\.(?:(?! )[^\\.-])+
发现
l o l l i .
p o p
和
n t u s e r . d a t
故障:
(?: # begin non-capturing group (?! ) # look-ahead: any position not followed by two spaces [^\\.-] # any character except '\', '.', and `-` )+ # end group, repeat at least once \. # a '.' (?: # \ (?! ) # |-- exactly the same as above [^\\.-] # | )+ # /
*
而不是+
。答案 1 :(得分:0)
找到第一个“。”在字符串中,然后将点的所有内容保留到遇到其中一项要求之前,可以使用:
^.*?((?:(?!\s\s|[.\\-]).)+\.(?:(?!\s\s|[.\\-]).)+)
您的比赛将在第一个捕获组中。
说明
^
断言字符串的开头.*?
将任意字符匹配零次或多次非贪婪,因此尽可能地放弃(
捕获组
(?:
非捕获组
(?!\s\s|[.\\-]).
负向查找,可以断言右侧不是两个空格字符或点,反斜杠或连字符。)+
关闭非捕获组更多时间\.
从字面上匹配一个点(?:
非捕获组
(?!\s\s|[.\\-]).
负向查找,可以断言右侧不是两个空格字符或点,反斜杠或连字符。)+
关闭不捕获的连字符并重复一次或多次)
关闭捕获组