2011-05-03 78 views
1

我不完全知道如何用简短的标题来描述我的问题,所以如果此问题的标题有点误导,我很抱歉。 但我真的不知道我在找什么东西被称为或者甚至是可能的。正则表达式 - 引用搜索中的第一个匹配

我想用正则表达式来查找HTML中一组匹配标记之间的所有内容。 这是方便我,当我与静态变量的测试,因为我可以只搜索一切都在两件文字如​​

我的问题就来了一个事实,即“myTag”可以是任何东西之间。 我只是不知道如何(或者如果它甚至可能)匹配开始标记与结束标记时,该文本是可变的。

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

我原本以为或许我可以这样写:\{(.*?)\}(someExpression)\{\/${1}\},但我不知道这是否真的有效,或者是否可行(更别说是否正确)。

我希望这个问题很有意义,因为我不太清楚如何去问这个问题。 主要是因为像我说的我不知道这是否有名字,如果有可能,我也是一个普通的初学者。

如果它有什么不同,我所做的这个语言是在PHP中使用preg_replace_callback函数。

任何帮助将不胜感激。

回答

2

试试这个:

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

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

+0

+1提及嵌套标签警告和正则表达式限制:) – alex 2011-05-03 06:31:18

+0

PCRE支持递归模式。 – Gumbo 2011-05-03 06:37:58

0

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

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

相关问题