1

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

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

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

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

我最初认为也许我可以写一些类似的东西:\{(.*?)\}(someExpression)\{\/${1}\}但我不知道这是否真的有效或者是否可能(更不用说它是否正确)。

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

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

任何帮助将不胜感激。

4

2 回答 2

2

试试这个:

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

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

于 2011-05-03T06:29:57.897 回答
0

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

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

于 2011-05-03T06:43:42.250 回答