我要选择一个唯一的字母字符串,该字符串不以任何字符"."
,":"
和";"
结束
例如:
"float a bbc 10" --> "float"
"float.h" --> null
"float:: namespace" --> "namesapace"
"float;" --> null
我想出了正则表达式\G([A-z]+)(?![:;\.])
,但是它只忽略被禁止字符之前的字符,而我需要它跳过被禁止字符之前的所有字符串。
我要选择一个唯一的字母字符串,该字符串不以任何字符"."
,":"
和";"
结束
例如:
"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+个字母所有格匹配,不允许回溯到模式中(?![:;.])
-如果当前位置的右侧紧邻有;
,:
或.
,则负匹配将使匹配失败。