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

How to find the first occurrence of sub-strings not ended with specified characters

我要 select 第一次出现不以任何字符 "."":"";"[ 结束的纯字母字符串=15=]

例如:

"float a bbc 10" --> "float"
"float.h" --> null
"float:: namespace" --> "namesapace"
"float;" --> null

我想出了正则表达式 \G([A-z]+)(?![:;\.]) 但它只忽略了禁止字符之前的字符,而我需要它跳过禁止字符之前的所有字符串。

您可以使用

/(?<!\S)[A-Za-z]++(?![:;.])/

regex demo。确保不要使用 g 修饰符来仅获得第一个匹配项。

这里的主要技巧之一是使用 possessive ++ quantifier 来匹配所有连续的字母,并仅在 :;. 之后检查一次最后一个匹配的字母。

图案详情

  • (?<!\S) - 空格或字符串开头应紧接在当前位置之前
  • [A-Za-z]++ - 1+ 个字母的所有格匹配,不允许回溯到模式中
  • (?![:;.]) - 如果紧邻当前位置右侧有 ;:.,则匹配失败的否定前瞻。