我有以下可能的字符串,我需要匹配特定的字符。
可能匹配的字符串:
\=\s*STRING\:\s(?=\")\"([^"]*)|([^:]*$)
以下是我试过的正则表达式。它正在工作但是对于第一个字符串,它与"匹配"
dsg.1.2.3.4.5.6.7.5 = STRING: "1234 blah blah blah"
为了匹配上面可能的字符串,我使用了if 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
需要输出:
[expression]
请帮我解决这个问题。
答案 0 :(得分:7)
试试这个正则表达式:
=\s*STRING:\s("?)([^"]*)\1
不需要使用预见,只需使用("?)
来匹配引号(如果存在),然后使用反向引用再次匹配它。 STRING
之后的字符串将存储在$2
。
答案 1 :(得分:2)
在perl(PCRE)中,您可以使用(?|...)
非捕获组构造使用正则表达式:
/=\s*STRING:\s(?|"([^"]*)|([^:]*))/
(?|...)
- 在此构造的每个替代项中声明的子模式将从相同的索引重新开始。
此正则表达式将匹配两个输入行的捕获组#1中的1234 blah blah blah
。