首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式中的"+“和"$”组合

正则表达式中的"+“和"$”组合
EN

Stack Overflow用户
提问于 2013-06-27 14:01:49
回答 1查看 134关注 0票数 2

感谢每一个回复的人。

我想我得稍微调整一下我的第一个问题。我有点困惑,因为$符号的定义。它只是断言字符串的末尾有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}+$)签名,它就能工作。是因为+符号是占有性的吗?我的意思是,据我所知,+标志告诉引擎一旦匹配就不要倒车。因此,我冒昧地猜测,$标志没有做他的工作,因为它甚至不做回溯(我不确定,当然,因为我不知道$标志是如何工作的背后)。是对的吗?

EN

回答 1

Stack Overflow用户

发布于 2013-06-27 14:14:58

如果这是你的全部准则,你就不需要向前看了。这两个规则是等价的:

代码语言:javascript
复制
^(?=\w{6,10}$)
^\w{6,10}$

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

通过将$放在前面的视图中,只有在整个输入中有6-10个单词字符时,它才会成功。

如果你也想要另一个限制的话,你才会使用向前看。例如,要匹配

6-10个单词字符,a出现在"b“之前。

您可以使用regex:

代码语言:javascript
复制
^(?=\w{6,10}$).*a.*b
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17345311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档