正则表达式中“+”与“$”的组合

时间:2013-06-27 14:01:50

标签: regex

感谢所有回复的人 我想我必须稍微调整一下我的第一个问题。 由于$符号的定义,我有点困惑。 它只是断言字符串最后有6到10个字符 而已!对?然后,在我看来,它必须与我的测试字符串"123a56A781231231231241"匹配。因为它不违反规则!字符串最开头的 6-10个字符,字符串的最后一个字符串。完美,不是吗?

另外,我想知道^(?=\w{6,10}$)^(?=\w{6,10})$之间的区别。

还有一个, Casimir et Hippolyte 你说 + +没有改变任何东西,这意味着只有量词({6,10}这里)占有欲并且不允许回溯。 这是否意味着+符号使$ sign禁用?

提前谢谢你们。

在我继续前进之前,我希望你们知道,自从我开始研究正则表达式以来,仅仅2天。我完全是新手。

首先。 ^(?=\w{6,10}$)这是模式。为什么美元信号必须在()之内?我知道这是一个愚蠢的问题,但我很好奇。我试图在()外面找到美元符号。但它没有按照我的预期发挥作用。

二。我找到了几个教程网站,它说美元符号意味着

  

$可能会出现在模式的末尾,要求匹配发生在一行的最后。例如,abc$匹配123abc但不匹配{{1} }}“

因此abc123.用于断言字符串的匹配部分位于一行的最后。正确?

如果确实如此,为什么这种模式:$无法与我的测试字符串匹配:"^(?=\w{6,10}$)"

如您所见,我的测试字符串在一行的开头包含6~10个字符,在一行的最后包含6~10个字符。

第三。正如我前面提到的,这种模式:"123a56A781231231231241"无法与我的测试字符串匹配:^(?=\w{6,10}$)但是!如果我在"123a56A781231231231241"之后添加+符号\w{6,10} 有用。 是因为^(?=\w{6,10}+$)符号占有欲吗?我的意思是,据我所知,+符号告诉引擎一旦完成匹配就不会回溯。所以我冒险猜测,$ sign不能完成他的工作,因为它甚至没有回溯(我当然不确定这一点,因为我不知道$ sign如何工作)。这样对吗?

3 个答案:

答案 0 :(得分:3)

如果这是你的整个正则表达式,你不需要预见。即这两个正则表达式是等价的:

^(?=\w{6,10}$)
^\w{6,10}$

为什么$需要在括号内?那是因为(锚定的)向前看^(?= \ w {6,10})只是断言在输入的前面有6到10个字符字符。但是如果在输入的前面有超过 6-10个单词字符,它就会成功。

通过将$放在前方,只有在整个输入中有6-10个字符时才会成功。

如果您还想要另一个限制,那么您只能使用前瞻。例如,匹配

  

6-10个字符,“a”出现在“b”之前

你会使用正则表达式:

^(?=\w{6,10}$).*a.*b

答案 1 :(得分:2)

  1. 我无法帮助你,因为我不知道你的意思。您是否尝试匹配 2 3 中的测试字符串?

  2. ^(?=\w{6,10}$)正在尝试匹配字符串的开头,后跟6-10个字符和字符串的结尾。您的字符串超过10个字符,因此不匹配。

  3. 添加+时,它匹配 6-10个字符串的一个或多个实例。

    添加+仍然不匹配,因为您要查找的字符串恰好匹配6-10个字符长,但您的测试字符串更长。在这种情况下,使其占有欲不会改变匹配。

答案 2 :(得分:2)

(?=..)是一个先行,它是一个零宽度的断言,这意味着它只是一个支票并且匹配没有。换句话说,前瞻意味着后跟

模式^(?=\w{6,10}$)表示:

开始字符串,后跟6到10个字符,直到字符串结尾。

请注意,没有任何匹配的字符,因为所有字符都在前瞻中,例如零也是零宽度。

匹配函数只能返回空字符串作为匹配结果,但如果满足条件则返回true(其他错误)

+不会改变任何东西,这只意味着量词(这里{6,10})占有欲并且不允许回溯。有关此功能的更多信息,请访问:www.regular-expressions.info/possessive.html