【发布时间】:2016-01-14 10:13:08
【问题描述】:
我需要测试这个字符串以匹配不以下划线开头的任何内容:
__$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"`
【问题讨论】:
-
只需将
^放在最开始就可以从字符串的开头匹配。否则将从字符串的中间开始匹配。 -
您希望结果是什么样的?
-
@saluce 添加了预期结果。
-
你可以试试这个:
(?!_)\s+([a-zA-z0-9$"=_]+) -
@Grundy 之所以有效,是因为它与
\s开头不匹配。将其更改为\s*并且您的正则表达式失败。让它在文本的中间,比如private string __$id0 = "lala",它就这样失败了。