2011-03-17 73 views
1

我試圖通過PHP ereg找到HTML標籤,該標籤在結束標籤前有一個{xxx} - 其中xxx可以是[A-Za-z0-9_\-]*幫助正則表達式html加上額外的字符串

例如:<p>xxxx</p><p>yyyy{asdf}</p>

這是我能想出的最好的:/<([\w]+)([^>]?)>([^{]*)\{([^}]+)\}<\/\1>/is

的問題是,雖然,它將匹配組3將有xxxx</p><p>yyyy,我只希望yyyy在這種情況下, 。

希望有人能幫助,歡呼,埃吉爾。

Ps。對於無用的標題感到抱歉,想不到更好的。

+1

永遠不要用正則表達式解析HTML。請從php.net查看DOMDocument – 2011-03-17 03:29:06

+0

@Mike您忘記了強制性鏈接 - http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – Phil 2011-03-17 03:30:38

+0

'ereg_ *'套件已被棄用多年並很快被刪除。請使用[PCRE功能](http://www.php.net/manual/en/ref.pcre.php) – Phil 2011-03-17 03:32:45

回答

3

在您的正則表達式中,在每個+*後面添加一個?。這會使比賽不那麼貪婪。

否則嘗試加入<>到負字符類[^{<>]*[^}<>]*排除在其間的標籤。

+0

謝謝。不會排除嵌套標籤嗎? – 2011-03-17 07:29:35

+0

是的。我假設你只想要那裏的文字內容。 – mario 2011-03-17 07:30:27