微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在正则表达式中特殊地使用’*’

在编写正则表达式模式时,将所有连续体’1’和单个’1’替换为’s’.我发现这很混乱,”(用于匹配1或更多)的使用给出了预期的结果,但’*’给出了奇怪的结果
>>> l='100'
>>> import re
>>> j=re.compile(r'(1)*')    
>>> m=j.sub('*',l)
>>> m
'*0*0*'

虽然”的使用给出了预期的结果.

>>> l='100'
>>> j=re.compile(r'1+')
>>> m=j.sub('*',l)
>>> m
'*00'

正则表达式中的’*’如何给出这个,而它的行为是匹配0或更多.

(1)*表示“匹配0或更多1”.因此,对于100,它匹配1,0和0之间的空字符串,以及最后0之后的空字符串.然后用’*’替换空字符串. 1在匹配中至少需要一个1,因此它与字符之间的边界不匹配.

对于那些好奇的读者,是的python输出是* 0 * 0 *而不是** 0 * 0 *.这是一个测试python script. (Regex101的输出错误,因为它不使用实际的python正则表达式引擎.在线正则表达式测试人员通常会使用PCRE(在PHP和Apache HTTP Server中提供),并伪造目标正则表达式引擎.总是测试你的正则表达式在实时代码!)

在这里,您可以在JavaScript中看到输出将是** 0 * 0 *(它将匹配1和0之间的空字符串作为新匹配)这是“正则表达式风格”为何重要的一个主要示例.不同引擎使用略有不同的规则. (在这种情况下,如果新匹配从0开始或字符边界)

console.log("100".replace(/(1)*/g,'*'))

原文地址:https://www.jb51.cc/regex/356614.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐