我有下面可能的字符串,我需要匹配特定的字符.
可能匹配的字符串:
dsg.1.2.3.4.5.6.7.5 = STRING: 1234 blah blah blah OR dsg.1.2.3.4.5.6.7.5 = STRING: "1234 blah blah blah"
下面是我试过的正则表达式.它正在工作但是对于第一个字符串,它与“”匹配
\=\s*STRING\:\s(?=\")\"([^"]*)|([^:]*$)
为了匹配上面可能的字符串,我使用if条件匹配dsg.1.2.3.4.5.6.7.5 = STRING:“1234 blah blah blah”
不是dsg.1.2.3.4.5.6.7.5 = STRING:1234 blah blah blah
匹配后的输出问题:
2. [29-58] ` 1234 blah blah blah`
需要输出:
1. [29-58] `1234 blah blah blah` --> No space
请帮我解决这个问题.
解决方法
在perl(PCRE)中,您可以使用(?| …)非捕获组构造使用正则表达式:
/=\s*STRING:\s(?|"([^"]*)|([^:]*))/
(?| …) – 在此构造的每个替代项中声明的子模式将从同一索引重新开始.
对于两个输入行,此正则表达式将在捕获的组#1中匹配1234 blah blah blah.