我希望與class
bc-de fg
把所有的標籤a
之間的內容在一個HTML文件中,就像這樣:如何使用正則表達式獲取HTML中給定屬性的標籤內容?
<a class="bc-de fg"> XXXXXXXXXXXXX </a>
所以我寫了下面的正則表達式:
$regexp = 「<a\wclass="bc\wde">(.*?)<\/a>」
這沒有工作。我對正則表達式很陌生,所以我試圖獲得更多練習。
我該如何糾正這個正則表達式?
我希望與class
bc-de fg
把所有的標籤a
之間的內容在一個HTML文件中,就像這樣:如何使用正則表達式獲取HTML中給定屬性的標籤內容?
<a class="bc-de fg"> XXXXXXXXXXXXX </a>
所以我寫了下面的正則表達式:
$regexp = 「<a\wclass="bc\wde">(.*?)<\/a>」
這沒有工作。我對正則表達式很陌生,所以我試圖獲得更多練習。
我該如何糾正這個正則表達式?
試着這麼做$regex = ":<a class="bc-de fg">(.*?)</a>:mi";
:
所以我沒有逃避斜線.
匹配除換行符\ r和\ n任何單個字符的所有時光。*?
重複上一項零次或多次。下面是一個簡單的cheatsheet,你可能會覺得有用。
對於HTML或任何嵌套結構,regex
被認爲是不好的做法。改爲使用DOM
。
你在正則表達式中的問題是轉義字符(在單引號之間放置正則表達式字符串)。而且您還沒有開始和結束的正則表達式字符(#...#
或\...\
)。
這是作爲答案發布的,但它不會嘗試回答問題。它應該可能是一個評論或完全刪除。 – Johnsyweb 2013-03-07 07:29:42
是的,我知道,但我希望使用reg ex來做... – lkkeepmoving 2013-03-07 07:30:14
這個編輯更像是一個答案☺ – Johnsyweb 2013-03-07 07:50:18
試試這個:
$str = '<a class="bc-de fg">Testing</a>';
preg_match('/<a class="bc\-de\s*fg">(?P<link>.*)<\/a>/',$str,$matches);
echo "<pre>";
print_r($matches);
您將獲得$link = $matches['link'];
鏈接這會給你更準確的結果:
preg_match('/<a.*class="bc\-de\s*fg".*>\s*(?P<link>.*)\s*<\/a>/',$str,$matches);
爲什麼我可以直接使用空格?我不應該用\ w? – lkkeepmoving 2013-03-07 07:34:04
您可以使用空格,但\ s是空格的常規exp模式,因爲您需要我使用的錨標記中的所有文本。*而不是\ w – 2013-03-07 07:37:10
試試這個:
$regexp = '/<a class="bc-de fg">(.*)<\/a>/';
preg_match_all($regexp, $subject, $matches);
您的回答將在$matches
。它應該適用於剛剛提到的場景。但如果情況是,如果屬性順序改變或更多的類被分配,這個正則表達式不會工作。最好的方法是使用DOM而不是使用正則表達式。
嘗試[^(<a\W*class="bc\-de fg"\W*>)+(</a>)+]
您可以使用不是^
運算符。
Cthulhu here ...使用DOM解析器。 – 2013-03-07 07:28:28
相關:http://stackoverflow.com/a/1732454/78845 – Johnsyweb 2013-03-07 07:30:24