2013-06-27 65 views
2

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

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

一个,卡西米尔等伊波利特你说的+并不能改变什么,这仅仅意味着量词({6,10}这里)是占有欲,不允许回溯。 这是否意味着+符号使$符号禁用?

谢谢你们提前。

在我进一步探讨之前,我想让大家知道,自从我开始学习正则表达式仅仅两天了。我是完全新手。

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

二。我发现了几个教程网站和它说的美元符号意味着

$可以在模式的结尾似乎需要的匹配一行的最后出现。例如,abc$比赛123abc但不abc123.

所以$被用来断言字符串匹配的部分是在一行的末尾。对?

如果是真的,为什么这个模式:"^(?=\w{6,10}$)"不能与我的测试字符串匹配:"123a56A781231231231241"

如您所见,我的测试字符串在一行的最开始处包含6〜10个单词字符,并且在行的最末尾处包含6〜10个单词字符。

三。正如我前面提到的,这种模式:^(?=\w{6,10}$)不能与我的测试字符串匹配:"123a56A781231231231241"但是!如果我在\w{6,10}后面添加+后面的符号,如^(?=\w{6,10}+$) 它可以工作。 是因为+符号是占有欲?我的意思是,据我所知,+符号告诉发动机在比赛结束后不要回溯。所以我冒险猜测,美元符号并没有做他的工作,因为它甚至没有回溯(当然,我不知道这一点,因为我不知道$符号是如何工作的)。这样对吗?

+3

_it未按预期工作._这是什么意思?它做什么与你期望它做什么? – Mathletics

+4

你应该检查这个网站:http://www.debuggex.com/它可以让你直观地看到你的表情发生了什么。非常酷的网站。 –

+1

我测试过perl和'^(?= \ w {6,10} + $)'不适用于字符串'123a56A781231231231241'(这很有意义,因为'+'是占有欲) – doubleDown

回答

2

(?=..)是一个超前,这是一个零宽度的断言,这意味着它只是一个检查和匹配没有什么。换句话说,前瞻意思是指后跟

图案^(?=\w{6,10}$)手段:

begining字符串随后6和10之间的单词字符,直到所述字符串的末尾的。

请注意,没有任何匹配的字符,因为所有内容都在向前展示了^也是零宽度。

的匹配函数只能返回一个空字符串作为匹配结果,但如果条件满足(otherwhise假)

的+不会改变任何东西将返回true,这意味着只有量词({6,10}这里)是占有欲,不允许回溯。有关此功能的更多信息,请执行以下操作:www.regular-expressions.info/possessive.html

+0

感谢您的回复。不过,我有一个问题。你说过'+不会改变任何东西,这意味着只有量词({6,10}这里)是占有欲,不允许回溯。'这是否意味着+符号使$符号禁用? – user2528192

+0

@ user2528192:不,它不是,其他量词使它占有后的'+',只意味着当正则表达式失败时,正则表达式不能回溯到字符组中('\ w')。这里并不重要。查看链接了解更多信息。 –

2
  1. 我不能帮助你,因为我不知道你的意思。您是否想要与和中的测试字符串匹配?

  2. ^(?=\w{6,10}$)正试图匹配字符串的开头,接着是6-10个单词字符和字符串的结尾。您的字符串超过10个字符,因此不匹配。

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

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

+1

'+'在这里并不意味着“一个或多个实例”。这是一个占有量词。更多信息在这里:http://www.regular-expressions.info/possessive.html –

+0

@CasimiretHippolyte酷,我不知道这一点。我已经更新了我的答案。 – Mathletics

3

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

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

为什么$需要在括号内?这是因为(锚定)前瞻^(?= \ w {6,10})只是声明在输入前端有6到10个字符。但是,如果在输入的前面有多于 6-10个字符,它将会成功。

通过将$放在前面,只有在输入中存在6-10个字符的情况下才会成功。

如果您还想要另一个限制,您将只使用前视。例如,为了匹配

6-10字字符,而 “一” 出现之前, “B”

你可以使用正则表达式:

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