【问题标题】:Regular expressions - Reference the first match in a search正则表达式 - 引用搜索中的第一个匹配项
【发布时间】:2011-05-03 06:26:17
【问题描述】:

我不太清楚如何用简短的标题来描述我的问题,所以如果这个问题的标题有点误导,我很抱歉。 但我真的不知道我要找的东西叫什么,或者它是否可能。

我正在尝试使用正则表达式来查找 HTML 中一组匹配标签之间的所有内容。 当我使用静态标签进行测试时,这对我来说很容易,因为我可以搜索两段文本之间的所有内容,例如 \{myTag\}(someExpression)\{\/myTag\}

我的问题在于“myTag”可以是任何东西。 当文本是可变的时,我只是不知道如何(或者甚至可能)将起始标签与结束标签匹配。

我以为我之前在正则表达式中看到了某种引用系统,您可以在其中使用美元符号和数字,但我不知道您是否可以在搜索本身中使用它。

我最初认为也许我可以写如下内容:\{(.*?)\}(someExpression)\{\/${1}\},但我不知道这是否真的有效或是否可能(更不用说它是否正确)。

我希望这个问题是有道理的,因为我不确定如何问它。 主要是因为就像我说的那样,我不知道这是否有名字,是否可能,而且我也是常规运动的初学者。

如果这有什么不同的话,我正在使用的语言是 PHP 中的 preg_replace_callback 函数。

任何帮助将不胜感激。

【问题讨论】:

    标签: php regex variables match preg-replace-callback


    【解决方案1】:

    试试这个:

    \{([^}]*)\}(someExpression)\{\/\1\}
    

    但请注意,您需要确保 someExpression 也不匹配结束标签(例如 .* 会)。当然,如果标签是嵌套的,那么所有的赌注都没有了,你需要一个不同的正则表达式(或解析器)。

    【讨论】:

    • +1 提及嵌套标签警告和正则表达式限制:)
    • PCRE 确实支持递归模式。
    【解决方案2】:

    这取决于你的情况。如果您知道它只是一个 HTML sn-p 并且有一个特定的模式可以搜索 HTML,那么您可以使用正则表达式来查找和替换该模式,但在我看来您正在尝试解析 HTML。所以问题是如果你有一个嵌套标签。您应该查看http://php.net/manual/en/function.preg-replace.php,因为这似乎是一个比带有回调的函数更容易使用的函数。

    作为关于正则表达式回溯的说明,您可以根据所使用的语言使用 $i 或 \i。不知道php正则表达式是否支持捕获组回溯。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-03
      • 2015-03-11
      • 1970-01-01
      • 2017-01-15
      • 2013-05-12
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多