2013-07-25 19 views
2

我知道我很可能會聽到「不要用正則表達式解析HTML」,所以讓我說這個問題只是學術問題,因爲我實際上已經使用DOM解決了我的問題,但在通往解決方案的道路上,我遇到了這種在gskinner網站上運行的模式,但我無法弄清楚如何使它在PHP preg_match()中工作。將正則表達式從gskinner轉換爲PHP

(?<=href\=")[^]+?(?=")

我認爲[^]引起的問題,但我不能肯定該怎麼辦纔好。

它打算做的是從一個href的引號之間拉出子字符串。 (可以預計它是一個網址或至少一部分)

回答

4

[^]是一個困難的構造。基本上它是一個空的否定角色類。但它應該匹配什麼?這取決於實施。有些語言將它解釋爲否定否定,所以它會匹配每個字符,這就是gskinner(意味着ActionScript 3)似乎正在做的事情。

我永遠不會使用這個,因爲它是模棱兩可的。

最可讀的方式是使用.,匹配每個字符(不帶換行符)的元字符,如果還需要換行符,只需添加修飾符s即可啓用dotall模式,這正是您想要的用[^]實現。

有時候使用的解決方法是使用像這樣的字符類[\s\S][\w\W]。這些也將匹配每個字符(包括換行符),因爲它們匹配一些預定義的字符類和它們的否定。

相關問題