以下3个正则表达式之间的主要区别是什么。
1)/^[^0-9]+$/
2)/[^0-9]+/
3)m/[^0-9]+/
我真的想要理解这一点,因为在线研究对我没什么帮助,我希望我能在这里找到一些帮助。
答案 0 :(得分:3)
所有这些都有[^ 0-9] +,这是一个或多个字符不数字0
,1
,...到{ {1}}。
9
锚定在字符串的开头和结尾,因此它将匹配任何只包含非数字的字符串。/^[^0-9]+$/
未锚定,因此它匹配包含至少一个(或多个)非数字的任何字符串。/[^0-9]+/
与第二个相同,但明确使用m//
match operator。要获得更好的解释,请查看regex101.com和first正则表达式的second。
答案 1 :(得分:2)
正则表达式和匹配运算符之间存在差异,该运算符将正则表达式作为其操作数。
您只有两个正则表达式 - ^[^0-9]+$
和[^0-9]+
。选项3使用与选项2相同的正则表达式,但它使用不同版本的匹配运算符。
1和2之间的区别在于1是锚定在字符串的开头和结尾,而2根本没有锚定。
所以1说"匹配字符串的开头,后跟一个或多个非数字,然后是字符串的结尾"。 2表示"匹配字符串中的一个或多个非数字"。
这有帮助吗?
答案 2 :(得分:1)
模式[^0-9]
对于这三个正则表达式是通用的,并且将匹配不十进制数字的任何单个字符
/^[^0-9]+$/
此将模式锚定到字符串的开头和结尾,并坚持它包含一个或多个非数字字符
抑扬符^
是一个零宽度的锚点,匹配字符串的开头
美元符号$
也是一个零宽度锚点,它将匹配字符串的末尾,或者如果换行符是字符串中的最后一行,则在换行符之前。因此,这将匹配"aaa"
和"aaa\n"
,但不匹配"aa7bb\n"
/[^0-9]+/
这没有锚点,如果字符串在任何地方包含至少一个非数字字符,则返回 true
它将匹配"12x345"
和失败以匹配"12345"
。请注意,尾随换行符会计为非数字字符,因此此模式将与"123\n"
匹配
m/[^0-9]+/
这与#2相同,但明确放置了m
。如果你使用分隔符的默认斜杠,这是不必要的,但是如果你匹配一个模式,例如一个文件路径,它本身包含斜杠,那么使用不同的东西会很方便
使用m
可让您选择自己的分隔符,例如m{/my/path}
而不是/\/my\/path/
本质上,#1询问字符串是否完全由非数字字符组成,而#2和#3是相同的,并测试字符串是否包含至少一个非数字字符