Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 组合+&引用;加上$&引用;正则表达式_Regex - Fatal编程技术网

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}+$)
它起作用了。 是因为符号是所有格吗?我的意思是,据我所知,+标志告诉引擎,一旦比赛结束,不要后退。所以我冒昧猜测,$符号不起作用,因为它甚至不做回溯(当然,我不确定这一点,因为我不知道$符号背后是如何工作的)。是这样吗

  • 我帮不了你,因为我不知道你的意思。您是否试图与23中的测试字符串匹配

  • ^(?=\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}在这里)是所有格的,不允许回溯