^.*(?=.*[0-9]).*$
我看到这个正则表达式在某个人的代码中。这是一个有效的正则表达式吗?我知道?
通常会使它前面的项变成可选的,比如abc?
可以让c
变成可选项。但是这里的?
出现在一个捕获括号的开头位置。那这代表什么意思呢?
^.*(?=.*[0-9]).*$
我看到这个正则表达式在某个人的代码中。这是一个有效的正则表达式吗?我知道?
通常会使它前面的项变成可选的,比如abc?
可以让c
变成可选项。但是这里的?
出现在一个捕获括号的开头位置。那这代表什么意思呢?
?
表示:可选地匹配前面的内容。(? .. )
用于断言...(?=
是一个先行断言,意思是:仅当括号中的内容跟在后面时才进行匹配。(?: ... )
非捕获括号。组合所包含的模式,但不提供匹配文本的捕获。比捕获括号更有效率。
(?> ... )
原子匹配括号。首次匹配括号内的子表达式,如果没有导致整个模式匹配,则将搜索回退到“(?>”之前的位置。
(?# ... )
自由格式注释(?# comment )。
(?= ... )
先行断言。如果圆括号中的模式在当前输入位置匹配,则为True,但不会推进输入位置。
(?! ... )
负先行断言。True如果括号中的模式不匹配当前输入位置。不会推进输入位置。
(?<= ... )
后行断言。True如果括号中的模式匹配当前输入位置之前的文本,并且匹配的最后一个字符是当前位置之前的输入字符。不会更改输入位置。后向模式匹配的可能字符串长度不能无限制(没有 * 或 + 运算符)。
(?<! ... )
负后行断言。 True如果括号中的模式不匹配当前输入位置之前的文本,并且匹配的最后一个字符是当前位置之前的输入字符。不会更改输入位置。后向模式匹配的可能字符串长度不能无限制(没有 * 或 + 运算符)。
?
的好处是能够像 .*?
这样切换贪婪模式。 - Eli Sand=
符号。如果是像=?
这样的情况,它就会寻找。所以,它确实是一个操作符。 - Dr.Kameleonfoo(?!foo)
= 匹配一个“foo”,但后面不跟着一个“foo”) - Dr.Kameleon
?
有许多不同的用途! - Eli Sand?=
。 - Jonas