2011-05-03 226 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正則表達式是否支持捕獲組回看。

相關問題