【发布时间】:2015-03-24 20:35:16
【问题描述】:
我在寻找好的正则表达式时遇到了一些麻烦。 我得到这个文本作为输入:
settings= ShouldAppears1
setting_ -> "ShouldAppears2"
setting__ = 'ShouldAppears3' #ShouldNotAppear
setting___ = "MissingEndQuote.ShouldNotAppears
因此,我想得到一个数组:
[0] => settings=ShouldAppears1
[1] => settings=ShouldAppears2 or [1] => settings="ShouldAppears2"
[2] => settings=ShouldAppears3 or [2] => settings="ShouldAppears3"
我遇到了一些麻烦,因为如果缺少结束引号并且我找不到反向引用工作,我不想要结果。
到目前为止我得到的是这个正则表达式:
(?i)([A-Z_]{3,}\s{0,1}[=><-]{1,2}\s{0,1}(['"]?).+?\2)
问题是我得到了这个输出:
0 => settings= A
1 =>
2 => setting_ = "Appears"
3 => "
4 => setting__ = "Appears"
5 => "
6 => setting___ = "
7 =>
我不想看到第 1、3、5、7 行,但我不能做一个 (?=) 非捕获组,但仍然可以使用反向引用。
感谢您的帮助,
编辑
我无法真正更改脚本中正则表达式的调用方式,我只能处理正则表达式。结果只是全局匹配,而不是全局完全匹配。如果我通过以下方式更改您的正则表达式:
(?i)(\w+\s*(?:=|->)\s*(?:("|')\w+\g{2}|\w+))
我明白了
0 => settings= ShouldAppears1
1 => setting_ -> "ShouldAppears2"
2 => "
3 => setting__ = 'ShouldAppears3'
4 => '
这几乎是完美的,但有没有办法摆脱 [2] 和 [4]?即设置 ("|') 不被捕获但仍然可以反向引用它?
【问题讨论】: