正则表达式 - 在搜索中引用第一个匹配项

时间:2011-05-03 06:26:17

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

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

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

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

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

我最初认为也许我可以编写类似:\{(.*?)\}(someExpression)\{\/${1}\}之类的内容,但我不知道这是否真的有用或者是否可行(更不用说是否正确)。

我希望这个问题有道理,因为我不确定如何提出这个问题。 主要是因为就像我说的那样我不知道这是否有名字,如果可能的话,我也是常规开展的初学者。

如果它与我所使用的语言有任何区别,那就是使用preg_replace_callback函数的PHP。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

试试这个:

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

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

答案 1 :(得分:0)

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

作为关于正则表达式回顾的注释,您可以使用$ i或\ i,具体取决于您使用的语言。我不知道php regex是否支持捕获组回顾。