4

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

我在某人的代码中看到了这个。这是一个有效的正则表达式吗?我知道?应该在它可选之前使项目abc?成为c可选的。但是?在捕获括号的开头。这意味着什么?

4

1 回答 1

8

?单独意味着:可选地匹配以前的内容。

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

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

参考


(?:……)

非捕获括号。对包含的模式进行分组,但不提供匹配文本的捕获。比捕获括号更有效。

(?> ... )

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

(?# ... )

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

(?= ... )

前瞻断言。如果括号中的模式在当前输入位置匹配,但不推进输入位置,则为真。

(?!……)

负前瞻断言。如果括号中的模式在当前输入位置不匹配,则为真。不推进输入位置。

(?<= ... )

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

(?<! ... )

否定的后视断言。如果括号中的模式与当前输入位置之前的文本不匹配,则为真,匹配的最后一个字符是当前位置之前的输入字符。不改变输入位置。由后视模式匹配的可能字符串的长度不能是无限的(没有 * 或 + 运算符。)

于 2012-04-18T01:31:33.487 回答