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

我要选择一个唯一的字母字符串,该字符串不以任何字符"."":"";"结束

例如:

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

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

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

您可以使用

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

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

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

模式详细信息

  • (?<!\S)-空格或字符串开头应紧邻当前位置
  • [A-Za-z]++-1+个字母所有格匹配,不允许回溯到模式中
  • (?![:;.])-如果当前位置的右侧紧邻有;:.,则负匹配将使匹配失败。
本文链接:https://www.f2er.com/2721352.html

大家都在问