【问题标题】:Named capture in PHP using regex使用正则表达式在 PHP 中命名捕获
【发布时间】:2011-10-21 17:26:12
【问题描述】:

如何在 PHP 中使用命名捕获和正则表达式?谁能给我一个工作示例?

【问题讨论】:

标签: php regex


【解决方案1】:

不适用于 replace ,仅对 php 中的匹配有用

$test="yet another test";

preg_match('/(?P<word>t[^s]+)/',$test,$matches);

var_dump($matches['word']);

【讨论】:

  • 谢谢。但是 t[^s]+ 是什么?考虑一下我想在匹配['word'] 中找到 之间的任何内容。我该怎么办?
  • [^s] =除了字母s之外的任何东西,我实际上是想写斜杠+ s作为空格,但输入错误但不是重要的部分。您可以在新问题中提出您的其他问题,也许有人会在我之前帮助您。
  • @sataho 您可以使用 /&lt;tag&gt;(?P&lt;word&gt;.*?)&lt;\/tag&gt;/ 之类的内容匹配标签之间的任何内容。
  • 现在,如果我想使用 1 个常规 exp 使用 2 个标签来执行此操作。我可以用吗? /(?P.*?) (?P.*?)/
  • 不,你不能那样做。您需要阅读更多关于正则表达式格式的信息:net.tutsplus.com/tutorials/javascript-ajax/…
【解决方案2】:

根据documentation

PHP 5.2.2 引入了两种替代语法 (?&lt;name&gt;pattern)(?'name'pattern)

所以你会得到相同的结果使用:

<?php
preg_match('/(?P<test>.+)/', $string, $matches);  // basic syntax
preg_match('/(?<test>.+)/', $string, $matches);   // alternative
preg_match("/(?'test'.+)/", $string, $matches);   // alternative

Check result on 3v4l.org

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 2019-03-17
    • 2011-03-03
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多