我需要测试此字符串以匹配任何不以下划线开头的内容:
__$id0 = "foo"
我的方法是匹配以下划线开头的字符串,然后将该匹配变为负面预测并捕获其余部分。
测试下划线的工作原理:
(_.*?\s)
给出了一个匹配:'__$id0
'
然而,将其变为负面预测并没有达到预期的效果:
((?!_.*?\s).*?\s)
会产生
MATCH 1
1. [2-7] `$id0 `
MATCH 2
1. [7-9] `= `
MATCH 3
1. [9-16] `"lala"`
下划线从第一个字符串中剥离,但字符串本身仍在结果集中。我想完全排除第一个字符串,因为它以_
开头。
如何排除以_
开头的字符串?
结果应该是这样的:
MATCH 1
1. [7-9] `= `
MATCH 2
1. [9-16] `"lala"`
答案 0 :(得分:2)
答案 1 :(得分:1)
这就是诀窍......匹配你不想保留的东西,然后匹配并捕获其他所有东西。
[\s]?_[^\s]*|\s?(.*?)\s+?
在|
管道的左侧,您将匹配以下划线开头的任何内容。如果它匹配,则需要正则表达式的那一侧。否则,尝试匹配下划线的右侧,该下划线被捕获并匹配任何不以下划线开头的内容。
当字符串的中间或末尾有下划线时,这也可以匹配。