Regex 如何查找未以指定字符结尾的子字符串的第一次出现

Regex 如何查找未以指定字符结尾的子字符串的第一次出现,regex,regex-negation,Regex,Regex Negation,我将选择第一个出现的字母字符串,该字符串不以任何字符“,”:“和”;“ 例如: "float a bbc 10" --> "float" "float.h" --> null "float:: namespace" --> "namesapace" "float;" --> null 我提出了正则表达式\G([A-z]+)(?![:;\.]),但它只忽略禁用字符之前的字符,而我需要它跳过禁用字符之前的所有字符串。您可以使用 /(?<!\S)[A-Za-z]++(?

我将选择第一个出现的字母字符串,该字符串不以任何字符
”:“
”;“

例如:

"float a bbc 10" --> "float"
"float.h" --> null
"float:: namespace" --> "namesapace"
"float;" --> null
我提出了正则表达式
\G([A-z]+)(?![:;\.])
,但它只忽略禁用字符之前的字符,而我需要它跳过禁用字符之前的所有字符串。

您可以使用

/(?<!\S)[A-Za-z]++(?![:;.])/
/(?
请参阅。确保不要使用
g
修饰符仅获取第一个匹配项

这里的一个主要技巧是使用a匹配所有连续的字母,并在最后一个匹配的字母之后只检查一次

图案细节

  • (?-空格或字符串开头应紧跟在当前位置之前
  • [A-Za-z]++
    -1+个字母以所有格匹配,不允许回溯到模式中
  • (?![:;。])
    -如果当前位置右侧有一个
    ,则会导致匹配失败的负前瞻

无论是第一次还是所有出现,都是用代码完成的。您需要的正则表达式是
(?)或
(?)嗯,您最好使用
^.*\K(?(PCRE)或在
^.*.*(?@WiktorStribiżew是的,它工作正常,我正在使用Perl和
(?工作得很好。谢谢,伙计!