regex 如何忽略以下划线开头的字符串

yrefmtwq  于 2023-06-25  发布在  其他
关注(0)|答案(4)|浏览(165)

我需要测试这个字符串是否匹配任何不以下划线开头的字符:
__$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"`

(图片来源:https://www.regex101.com/r/cC2pV7/1

k75qkfdt

k75qkfdt1#

您应该首先使用^检查行的开头。然后,你想匹配任何 * 不是 * 下划线的东西,所以你使用一个倒置字符类:[^_]

^([^_].*?)\s*=\s*(.*?)

Working example

m1m5dgzv

m1m5dgzv2#

这里的技巧...匹配你不想保留的,然后匹配和捕获其他一切。

[\s]?_[^\s]*|\s?(.*?)\s+?

|管道的左侧,匹配以下划线开头的任何内容。如果匹配,则采用正则表达式的另一侧。否则,尝试匹配下划线的右侧,这将被捕获并匹配任何不以下划线开头的内容。
这也将允许您在字符串的中间或末尾出现下划线时进行匹配。
https://www.regex101.com/r/cC2pV7/3

zzzyeukh

zzzyeukh3#

我知道这个标签,所有的东西似乎都在说必须使用正则表达式,但如果它对某人有帮助,怎么样:

string_to_compare[0] =! '_'
xxls0lw8

xxls0lw84#

使用以下正则表达式:

^(?!_).+

它匹配开头没有下划线的单词或短语。如果你只需要这些话,请使用这个:

^(?!_)\w+

两者都适用于C#和JavaScript。

相关问题