正则表达式 - 匹配字符串:和空格

时间:2016-09-13 16:15:16

标签: regex perl

我有以下可能的字符串,我需要匹配特定的字符。

可能匹配的字符串:

\=\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]

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:7)

试试这个正则表达式:

=\s*STRING:\s("?)([^"]*)\1

不需要使用预见,只需使用("?)来匹配引号(如果存在),然后使用反向引用再次匹配它。 STRING之后的字符串将存储在$2

答案 1 :(得分:2)

在perl(PCRE)中,您可以使用(?|...)非捕获组构造使用正则表达式:

/=\s*STRING:\s(?|"([^"]*)|([^:]*))/

RegEx Demo

(?|...) - 在此构造的每个替代项中声明的子模式将从相同的索引重新开始。

此正则表达式将匹配两个输入行的捕获组#1中的1234 blah blah blah