正则表达式需求:匹配合法单引号包裹字符串,排除奇数单引号
正则表达式优化方案
最终正则表达式
^'(?:[^'\n ])*'$
规则说明
^:匹配字符串开头,确保从第一个字符开始匹配':匹配开头的单引号(?:[^'\n ])*:非捕获分组,匹配0个或多个以下字符:- 不是单引号(
') - 不是换行符(
\n) - 不是空格
- 不是单引号(
':匹配结尾的单引号$:匹配字符串结尾,确保到最后一个字符结束
匹配验证
符合匹配规则的场景
'abc':成对单引号包裹纯文本,无禁止字符'abc#@$%^xyz':成对单引号包裹含特殊符号的文本,无禁止字符
不符合匹配规则的场景
'\n':包含换行符,被[^'\n ]排除'abc#'@$%^xyz':字符串中间存在未成对的单引号,整体单引号数量为奇数,无法满足开头+结尾的成对要求''':单引号数量为3(奇数),无法匹配^'...'$的成对结构':单引号数量为1(奇数),缺少结尾的单引号
原正则问题分析
原正则'.[^ \n']*'(?!')的问题在于没有用锚点限定整个字符串范围,会错误匹配'''中的前两个单引号(即''),而添加^和$锚点后,能确保只匹配整个字符串是成对单引号包裹合法内容的情况,从根源上避免了奇数个单引号的匹配。
内容的提问来源于stack exchange,提问作者Nikhilesh
相关产品推荐
相关产品推荐

