正则表达式无法匹配最后一组内容的技术求助
正则表达式捕获末尾值的修复方案
我用的正则表达式是这个:
(.*?)(>=|<=|~|!=|=|!~|>|<!| IS | IS NOT | WAS | WAS IN | WAS NOT | WAS NOT IN | CHANGED | OR | AND | IN | NOT IN )
测试文本如下:
project=blah AND blah=something OR issuetype!="blah" AND someissue IN somefunction("blah") OR blahing <= "something"
这表达式能匹配大部分内容,但最后那个"something"就是抓不到。我知道问题在哪——原表达式只会在遇到指定操作符时触发捕获,可最后这个值后面没操作符,到文本结尾就停了,所以没被匹配到。
直接给修改后的正则:
(.*?)(>=|<=|~|!=|=|!~|>|<!| IS | IS NOT | WAS | WAS IN | WAS NOT | WAS NOT IN | CHANGED | OR | AND | IN | NOT IN |$)
修改点说明
就在操作符列表最后加了|$,意思是把字符串结尾也当成一个匹配触发条件。这样遍历到文本末尾时,即使没有后续操作符,也会触发捕获,把最后这个值捞出来。另外原表达式的非贪婪匹配.*?保留着,不会出现过度匹配的问题。
内容的提问来源于stack exchange,提问作者binks
相关产品推荐
相关产品推荐

