这是怎么回事?运营商在正则表达式中工作?

时间:2012-04-18 01:29:11

标签: regex

^.*(?=.*[0-9]).*$

我看到这张贴在某人的代码中。这是一个有效的正则表达式吗?我知道?应该使其前面的项可选,例如abc?使c成为可选项。但是?是捕获支架的开始。这是什么意思?

1 个答案:

答案 0 :(得分:8)

?单独意味着:选择匹配之前的内容。

但是,(? .. )用于断言......

在您的情况下,(?=是一个前瞻性断言,意思是:如果仅匹配(括号中的内容),则匹配。

  

参考

     
     

(?:...)

     

非捕获括号。对包含的模式进行分组,但是   不提供匹配文本的捕获。效率更高   而不是捕捉括号。

     

(?> ...)

     

原子匹配括号。括号的第一个匹配   子表达式是唯一尝试过的;如果它不会导致整体   模式匹配,备份搜索匹配到之前的位置   “(大于?”

     

(?#...)

     

自由格式评论(?#comment)。

     

(?= ...)

     

前瞻性断言。如果括号模式为真   匹配当前输入位置,但不提前输入   位置。

     

(?!...)

     

负面的前瞻性断言。如果括号括起,则为真   模式在当前输入位置不匹配。不提前   输入位置。

     

(?< = ...)

     

后面的断言。如果括号模式为真   匹配当前输入位置之前的文本和最后一个   匹配的字符是前面的输入字符   当前位置。不改变输入位置。的长度   由后视图案匹配的可能字符串不得为   无界(没有*或+运算符。)

     

(?<!...)

     

负面后瞻断言。如果括号括起,则为真   pattern与当前输入位置之前的文本不匹配   匹配的最后一个字符就是之前的输入字符   目前的立场。不改变输入位置。的长度   由后视图案匹配的可能字符串不得为   无界(没有*或+运算符。)