提问人:NulisDefo 提问时间:2/17/2020 最后编辑:Pavneet_SinghNulisDefo 更新时间:2/17/2020 访问量:112
正则表达式条件正向展望
Regex conditional positive lookahead
问:
我目前正在尝试使用正则表达式,试图更好地掌握它们,并且有一个我现在似乎很挣扎的场景,因为我不知道这是否可以通过正则表达式实现。
我有这样的文本字符串
$array['key']['FirstWord']
$array['key']['FirstWord SecondWord']
$array['key']['FirstWord SecondWord ThirdWord']
$array['key']['FirstWord SecondWord ThirdWord FourthWord']
该清单可能正在进行中。我想匹配(选择)内部关键字之间的空格。因此,在第二行中,它将是 和 之间的空格。FirstWord
SecondWord
有了,我能够匹配键中包含多个单词的行。把第一部分作为积极的展望,我能够在关键词开始之前放上“标记”,然后我就迷路了。我正在考虑使用单词边界,然后在它们之间选择任何东西,但到目前为止还没有成功。有什么建议或指示吗?^\$array\['key'\]\['(?:\w+ +)+
(?<=^\$array\['key'\]\[')
编辑:
假设这些行之间也会有一些其他文本,因此 simple 不能用作正则表达式。\b
答:
4赞
The fourth bird
2/17/2020
#1
如果支持,则可以使用锚点来获取迭代匹配项,从而在上一场比赛结束时断言位置。\G
您匹配任何一个字符,或者再匹配 1 个单词字符,而忘记当前匹配的内容^\$array\['key'\]\['
\K
然后匹配 1 个或多个水平空格字符。
(?:^\$array\['key'\]\['(?=.*?'])\w+|\G(?!^))\w+\K\h+
(?:
非捕获组^\$array\['key'\]\['
火柴$array['key']['
(?=.*?'])
积极向前看,向右断言']
\w+
匹配 1+ 个单词字符|
或\G(?!^)
在上一场比赛结束时断言位置,而不是在开始时断言位置
)
关闭非捕获组\w+
匹配 1+ 个单词字符\K
重置报告匹配项的起点(忘记匹配项)\h+
匹配 1+ 水平空格字符
评论
0赞
JvdV
2/17/2020
不错,+。你介意解释一下不同的部分吗?我第一次看到等等。\G
K
0赞
The fourth bird
2/17/2020
当然,我现在正在吃午饭,但几分钟后我会添加它。
0赞
NulisDefo
2/17/2020
因此,在我玩了一会儿之后,据我所知,在上一场比赛之后的每个字符之后设置锚点,然后从您匹配的单词后跟空格的字符中设置锚点。怎么会这样?\G
0赞
NulisDefo
2/17/2020
如果不支持,有什么替代建议吗?\G
0赞
The fourth bird
2/17/2020
@NulisDefo 还有其他选项,例如,如果支持无限宽度模式的后视,则可以使用 regex101.com/r/vcA169/1 但此匹配范围更广一些。(?<=^\$array\['.*) (?=.*?\])
上一个:动态创建的元素上的事件绑定?
下一个:如何使用临时表设置触发器
评论