【问题标题】:Greater than and less than symbol in regular expressions正则表达式中的大于和小于符号
【发布时间】:2020-11-11 21:36:06
【问题描述】:

我是正则表达式的新手,我只是厌倦了真正研究所有正则表达式字符和所有内容。我需要知道正则表达式中大于符号的目的是什么,例如:

preg_match('/(?<=<).*?(?=>)/', 'sadfas<email@email.com>', $email);

请告诉我正则表达式中大于符号和小于符号的用法。

【问题讨论】:

标签: php regex


【解决方案1】:

大于符号仅匹配目标字符串末尾的文字 &gt;

小于符号不是那么简单。首先让我们回顾一下lookaround语法:

模式(?&lt;={pattern})是一个肯定的lookbehind断言,它测试当前匹配的字符串前面是否有匹配{pattern}的字符串。

模式(?={pattern})是一个肯定的前瞻断言,它测试当前匹配的字符串后面是否有匹配{pattern}的字符串。

所以打破你的表达方式

  • (?&lt;=&lt;) 断言当前匹配的字符串前面有文字 &lt;
  • .*? 懒惰地匹配任何东西零次或多次
  • (?=&gt;) 断言比当前匹配的字符串后跟一个文字 &gt;

将它们放在一起,模式将从您给它的输入字符串中提取email@email.com

【讨论】:

    【解决方案2】:

    您的正则表达式正在使用lookarounds 来捕获&lt;&gt; 字符之间的电子邮件地址。在您的示例输入中,它捕获email@email.com

    说明:

    (?<=<) Positive Lookbehind - Assert that the regex below can be matched
    < matches the character < literally
    .*? matches any character (except newline)
    Quantifier: Between zero and unlimited times, as few times as possible,
    expanding as needed [lazy]
    (?=>) Positive Lookahead - Assert that the regex below can be matched
    > matches the character > literally
    

    在线演示:http://regex101.com/r/yH6tY8

    【讨论】:

    • 我没听懂 (?
    • 希望你现在已经理解了这些答案:)
    • 不,我明白 (?=
    • 正如我在回答中所写的那样。 (?&lt;=...)Positive Lookbehind 的语法,(?&lt;=&lt;) 确保匹配的文本立即以文字 &lt; 开头。
    • 这是一个令人印象深刻的网站
    猜你喜欢
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多