我需要测试这个字符串,以匹配不以下划线开头的任何内容:
__$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"`发布于 2015-10-15 20:36:21
下面是您不想保留的trick...match,然后匹配并捕获其他所有内容。
[\s]?_[^\s]*|\s?(.*?)\s+?在|管道的左侧,您将匹配以下划线开头的任何内容。如果它匹配的话,它就占据了正则表达式的那一边。否则,尝试匹配下划线的右侧,该下划线将被捕获,并匹配任何不以下划线开头的内容。
这还允许您在字符串中间或末尾出现下划线时进行匹配。
发布于 2015-10-15 19:52:59
发布于 2021-12-16 10:37:16
我知道这个标记,所有的东西似乎都说必须使用regex,但是如果它对某人有帮助的话,不如:
string_to_compare[0] =! '_'https://stackoverflow.com/questions/33157251
复制相似问题