^.*(?=.*[0-9]).*$
我看到这张贴在某人的代码中。这是一个有效的正则表达式吗?我知道?
应该使其前面的项可选,例如abc?
使c
成为可选项。但是?
是捕获支架的开始。这是什么意思?
答案 0 :(得分:8)
?
单独意味着:选择匹配之前的内容。
但是,(? .. )
用于断言......
在您的情况下,(?=
是一个前瞻性断言,意思是:如果仅匹配(括号中的内容),则匹配。
参考
(?:...)
非捕获括号。对包含的模式进行分组,但是 不提供匹配文本的捕获。效率更高 而不是捕捉括号。
(?> ...)
原子匹配括号。括号的第一个匹配 子表达式是唯一尝试过的;如果它不会导致整体 模式匹配,备份搜索匹配到之前的位置 “(大于?”
(?#...)
自由格式评论(?#comment)。
(?= ...)
前瞻性断言。如果括号模式为真 匹配当前输入位置,但不提前输入 位置。
(?!...)
负面的前瞻性断言。如果括号括起,则为真 模式在当前输入位置不匹配。不提前 输入位置。
(?< = ...)
后面的断言。如果括号模式为真 匹配当前输入位置之前的文本和最后一个 匹配的字符是前面的输入字符 当前位置。不改变输入位置。的长度 由后视图案匹配的可能字符串不得为 无界(没有*或+运算符。)
(?<!...)
负面后瞻断言。如果括号括起,则为真 pattern与当前输入位置之前的文本不匹配 匹配的最后一个字符就是之前的输入字符 目前的立场。不改变输入位置。的长度 由后视图案匹配的可能字符串不得为 无界(没有*或+运算符。)