Regex 组合+&引用;加上$&引用;正则表达式
感谢所有回复的人。Regex 组合+&引用;加上$&引用;正则表达式,regex,Regex,感谢所有回复的人。 我想我必须稍微调整一下我的第一个问题。 我有点困惑,因为$sign的定义。 它只是断言字符串的最末端有6到10个单词字符。 就这样!对吗?然后,它必须与我认为的测试字符串“123A56A781231231241”匹配。因为它没有违反规则字符串最开头和最末尾的6-10个单词字符。很好,不是吗? 另外,我想知道^(?=\w{6,10}$)和^(?=\w{6,10})$之间的区别 还有一点,Casimir et Hippolyte你说过,这个+不会改变任何东西,这意味着量词({6,
我想我必须稍微调整一下我的第一个问题。 我有点困惑,因为$sign的定义。 它只是断言字符串的最末端有6到10个单词字符。
就这样!对吗?然后,它必须与我认为的测试字符串“123A56A781231231241”匹配。因为它没有违反规则字符串最开头和最末尾的6-10个单词字符。很好,不是吗? 另外,我想知道
^(?=\w{6,10}$)
和^(?=\w{6,10})$
之间的区别
还有一点,Casimir et Hippolyte你说过,这个+不会改变任何东西,这意味着量词({6,10}这里)是所有格的,不允许回溯。
这是否意味着+sign使$sign禁用
提前谢谢你们
在我继续之前,我想让你们知道,我开始研究正则表达式才两天。我完全是新手
首先<代码>^(?=\w{6,10}$)这是一种模式。为什么美元信号必须在()
内?我知道这是个愚蠢的问题,但我很好奇。我试图在()
的外侧找到美元符号。但它没有像我预期的那样起作用
第二。我找到了几个教程网站,上面写着美元符号的意思
“$
可能出现在模式的末尾,要求匹配发生在行尾。例如,abc$
匹配123abc
,但不匹配abc123。
”
因此,$
用于断言字符串的匹配部分位于一行的末尾。对吧?
如果这是真的,为什么这个模式:“^(?=\w{6,10}$)”
不能与我的测试字符串匹配:“123A56A781231231241”
如您所见,我的测试字符串在行首包含6~10个单词字符,在行尾包含6~10个单词字符
第三,。正如我前面提到的,这个模式:^(?=\w{6,10}$)
不能与我的测试字符串匹配:“123A56A781231231241”
但是!如果我在\w{6,10}
后面添加+
符号,就像^(?=\w{6,10}+$)
它起作用了。
是因为符号是所有格吗?我的意思是,据我所知,+标志告诉引擎,一旦比赛结束,不要后退。所以我冒昧猜测,$符号不起作用,因为它甚至不做回溯(当然,我不确定这一点,因为我不知道$符号背后是如何工作的)。是这样吗
^(?=\w{6,10}$)
正在尝试匹配字符串的开头,后跟6-10个单词字符和字符串的结尾。您的字符串长度超过10个字符,因此不匹配+
时,它匹配6-10字符串的一个或多个实例
添加+
仍然不应该匹配,因为无论哪种方法,您都希望匹配长度正好为6-10个字符的字符串,但您的测试字符串更长。在这种情况下,将其设为占有不会改变匹配如果这就是你的全部正则表达式,你不需要向前看。ie这两个正则表达式是等价的:
^(?=\w{6,10}$)
^\w{6,10}$
为什么$
需要放在括号内?这是因为(锚定的)前瞻性^(?=\w{6,10})断言在输入的前面有6到10个字字符。但是如果在输入的前面有超过6-10个字的字符,它就会成功
通过将$
放在前瞻中,只有当整个输入中有6-10个单词字符时,它才会成功
如果您还希望有另一个限制,则只会使用“向前看”。例如,匹配
6-10个字符,在“b”之前出现“a”
您将使用正则表达式:
^(?=\w{6,10}$).*a.*b
(?=…)
是一个前瞻,它是一个零宽度断言,这意味着它只是一个检查,不匹配任何内容。换句话说,先行意味着后面紧跟着
模式^(?=\w{6,10}$)
表示:
字符串的开头,后跟6到10个单词字符,直到字符串结束
请注意,没有任何字符匹配,因为所有字符都在一个同样为零宽度的前瞻性excêct^内
匹配函数只能返回一个空字符串作为匹配结果,但如果满足条件则返回true(否则返回false)
+没有改变任何东西,这意味着量词(
{6,10}
这里)是所有格的,不允许回溯。有关此功能的更多信息,请参见此处:它没有像我预期的那样工作。这是什么意思?它做了什么和你期望它做什么?你应该看看这个网站:它允许你可视化你的表情。非常酷的站点。我用perl和^(?=\w{6,10}+$)
测试了它,但它不能使用字符串123a56A781231231231241
(这是有意义的,因为+
是所有格的)您使用(?=…)
的任何原因?我已经20年没有使用正则表达式了,我很少发现需要lookaheads。所以,我怀疑你在仅仅两天后是否真的需要它。我从来没有说过我必须使用(?-…)
。就像我说的,我只是想学习这些东西,所以我问了一下。+
在这里并不意味着“一个或多个实例”。这是一个所有格量词。这里有更多信息:@casimirithippolyte酷,我不知道。我已经更新了我的答案。谢谢你的回复。不过我有个问题。你说,的+不改变任何东西,这意味着量词({6,10}在这里)是所有格的,不允许回溯