如何查找第一次出现的不以指定字符结尾的子字符串
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+ 个字母的所有格匹配,不允许回溯到模式中
(?![:;.])
- 如果紧邻当前位置右侧有 ;
、:
或 .
,则匹配失败的否定前瞻。
我要 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+ 个字母的所有格匹配,不允许回溯到模式中(?![:;.])
- 如果紧邻当前位置右侧有;
、:
或.
,则匹配失败的否定前瞻。