感谢每一个回复的人。
我想我得稍微调整一下我的第一个问题。我有点困惑,因为$符号的定义。它只是断言字符串的末尾有6到10个单词字符。
就这样!对吗?然后,我认为它必须与我的测试字符串"123a56A781231231231241"相匹配。因为它不会违反规则!6-10字字符在字符串的开头和字符串的末尾。太完美了,不是吗?
另外,我想知道^(?=\w{6,10}$)和^(?=\w{6,10})$之间的区别。
还有一个,Casimir et Hippolyte你说过+不会改变任何东西,这意味着量词(这里的{6,10} )是占有性的,不允许回溯。,意思是+符号使$符号禁用吗?
提前谢谢你们。
在我更进一步之前,我想让你们知道,从我开始研究regex到现在才两天。我完全是新手。
第一。^(?=\w{6,10}$),这是模式。为什么美元信号必须在()内部?我知道这是个愚蠢的问题但我很好奇。我试着在()的外面找到美元标志。但不像我预料的那样起作用了。
第二。我找到了几个教程网站,上面写着美元标志意味着
"
$可能出现在模式的末尾,要求匹配发生在行的末尾。例如,abc$匹配123abc,而不匹配abc123.。“
因此,$用于断言字符串的匹配部分位于行的末尾。对吗?
如果是这样的话,为什么这个模式:"^(?=\w{6,10}$)"不能与我的测试字符串:"123a56A781231231231241"匹配。
正如您所看到的,我的测试字符串在一行开头包含6~10个单词字符,在一行末尾包含6~10个单词字符。
第三。正如我前面提到的,这个模式:^(?=\w{6,10}$)不能与我的测试字符串:"123a56A781231231231241"匹配,但是!如果我在\w{6,10} (如^(?=\w{6,10}+$) )后面添加了^(?=\w{6,10}+$)签名,它就能工作。是因为+符号是占有性的吗?我的意思是,据我所知,+标志告诉引擎一旦匹配就不要倒车。因此,我冒昧地猜测,$标志没有做他的工作,因为它甚至不做回溯(我不确定,当然,因为我不知道$标志是如何工作的背后)。是对的吗?
发布于 2013-06-27 14:14:58
如果这是你的全部准则,你就不需要向前看了。这两个规则是等价的:
^(?=\w{6,10}$)
^\w{6,10}$为什么$需要在括号内?这是因为(锚定)向前看^(?=\w{6, 10 })刚刚断言输入前面有6到10个单词字符。但是,如果输入前面有超过6-10个字符,它就会成功。
通过将$放在前面的视图中,只有在整个输入中有6-10个单词字符时,它才会成功。
如果你也想要另一个限制的话,你才会使用向前看。例如,要匹配
6-10个单词字符,a出现在"b“之前。
您可以使用regex:
^(?=\w{6,10}$).*a.*bhttps://stackoverflow.com/questions/17345311
复制相似问题