Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.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
Php 在其他组中使用上一个表达式_Php_Regex - Fatal编程技术网

Php 在其他组中使用上一个表达式

Php 在其他组中使用上一个表达式,php,regex,Php,Regex,在上面的正则表达式中,组1和组3包含相同的表达式。 在另一组中,除了重新键入同一表达式外,还有其他方法可以使用该表达式吗?如果您使用的是PCRE,则可以执行以下操作: /([a-zA-Z0-9\-])(@)([a-zA-Z0-9\-])/ 如果要重复使用组,可以: /([a-zA-Z0-9\-])(@)(?1)/ (?1)将使用组1中的模式。现在让我们润色一下您的正则表达式: 删除不必要的组:/([a-zA-Z0-9\-])@(?1)/ 我们不需要逃避:/([a-zA-Z0-9-])@(?1)

在上面的正则表达式中,组1和组3包含相同的表达式。
在另一组中,除了重新键入同一表达式外,还有其他方法可以使用该表达式吗?

如果您使用的是PCRE,则可以执行以下操作:

/([a-zA-Z0-9\-])(@)([a-zA-Z0-9\-])/

如果要重复使用组,可以:

/([a-zA-Z0-9\-])(@)(?1)/

(?1)
将使用组1中的模式。现在让我们润色一下您的正则表达式:

  • 删除不必要的组:
    /([a-zA-Z0-9\-])@(?1)/
  • 我们不需要逃避:
    /([a-zA-Z0-9-])@(?1)/
  • 让我们使用:
    /([a-z0-9-])@(?1)/i
  • 进一步阅读:


    您使用的是什么语言?在PCRE(php)/perl中,你可以使用递归
    /([a-z0-9-])@(?1)/i
    我在使用php,在regex101上尝试它似乎不起作用。啊,我明白了,非常感谢:D@user3639768:当您询问有关regex的问题时,放置语言标签很重要,因为不同的语言具有不同的regex功能。感谢您的精彩解释:我想知道是否设置了
    i
    修饰符,我是否需要
    A-Z
    内部
    [A-zA-Z0-9\-]
    ?如果设置了
    i
    修饰符,我们不需要
    A-Z
    ,因为
    A-Z
    已经指定,它将匹配不区分大小写的。
    /([a-zA-Z0-9\-])@(?1)/
                    ^
                  () not needed around the @ sign