2013-01-23 75 views
1

我需要的是非常簡單的。如果鏈接或單詞爲空或空白,則不匹配。正則表達式匹配不是空的HTML鏈接?

<a href="link">anything</a> - match 
<a href="">anything</a>  - not match 
<a href="link"></a>   - not match 
<a href=" ">anything</a> - not match 
<a href="link"> </a>  - not match 
<a href=" "> </a>   - not match 
<a href=""> </a>   - not match 
<a href=" "></a>   - not match 
<a href=""></a>    - not match 

我先試了一下;

<a href="(.*?)">(.*?)</a> 

我知道^a意味着不是一個。但只有^無效。那麼什麼語法意味着不是空的?

注意:我知道a標記中可以有其他屬性。

+4

爲什麼不使用正確的HTML解析器而不是正則表達式? –

+0

您可以通過檢查非空白字符的_presence_來檢查鏈接或單詞是空還是空白。無論如何,建議您參考DOM來確定html節點內容。 – MikeM

回答

0

試試這個:

<a href="[^"\s]+"[^>]*>[^<\s]+</a> 
+0

這不會允許_ ...'標記之間_any_空格。 – speakr

+0

@speakr是真的,但沒有任何問題的測試用例有任何空格:) btw,我可以修復它,但我cbb – Bohemian

1

我需要的是非常簡單的。

是的,你真正需要的是XPath的:

//a[normalize-space(@href) != ""] 
+2

這將匹配''這實際上不應匹配。 '// [normalize-space(@href)!=「」和normalize-space(text())!=「」]'應該可以工作。 XPath的+1。 – speakr

+0

@speakr:哦對。似乎我需要的是更仔細閱讀 – BeniBela

1

如果你真的想用正則表達式來解決這個問題,你可以使用這個:

/<a href="[^\s"]+">[^<]*[^<\s][^<]*<\/a>/ 

這符合一切href="..."屬性至少有一個char長度並且不包含空格。

此外它匹配<a>...</a>標籤之間的所有內容,其中至少包含一個非空白字符。

如果你想允許包含URL空格這個正則表達式的工作原理:

/<a href="[^"]*[^\s"]+[^"]*">[^<]*[^<\s][^<]*<\/a>/ 

但是,考慮使用一個解析器和類似的XPath查詢語言,而不是(如建議here)。

0

你可以使用

/<a href="\s*\S[^"]*">\s*\S[^<]*<\/a>/ 

\s*\S[^<]*<手段,直到後面跟着一個非空白字符後跟任意字符空格沒有或多次匹配,是不是<沒有或更多次,直到後面跟着<

當然,如果標籤之間有<,這可能會失敗。