2012-10-25 50 views
0

我使用:這個正則表達式怎麼不起作用?

"<a\b[^>]*href=\"\\lyrics\\*\">(.*?)</a>"; 

我試圖找到這些paremeters下的值:

 <a href="/lyrics/anything.html">This is what I need</a> 

我需要找到「這是我需要什麼」,而是「什麼」根據鏈接而變化。我不想在所有'a'標籤內找到文本,但只有其中的一部分位於歌詞文件夾內。我不明白爲什麼這目前不工作?我很難解釋,但提前感謝。哦,我理解正則表達式可能不是最好的方法,但是,我真的很想看看它。

+0

* HREF = \ 「\ /歌詞\/* \」 >(。*?) – JohnLBevan

回答

2

你逃避\\而不是使用/(這是/lyrics/\lyrics\

此外,\\*將匹配0個或多個\字符,當你應該不是"任何字符匹配。

以下將做:

"<a\b[^>]*href=\"/lyrics/[^\"]*\">(.*?)</a>" 
+0

啊,完全滑了我的腦海。謝謝! – iyop45

+0

我需要使用<\/a>,因爲我一直在收到一個錯誤,但是,感謝您讓我走向正確的方向。 – iyop45

0

你的斜槓是錯誤的方式(即那些它彌補了路徑),你就錯過一個圓點*前:

<a\b[^>]*href=\"/lyrics/.*\">(.*?)</a> 
+0

通常不需要轉義'/'。 – Oded

+0

啊 - 感謝Oded;我總是在沒有問題的情況下使用它們,所以從來沒有意識到它們是多餘的 - 刪除(這基本上意味着我現在已經得到了你的答案和一個點 - 指向你指出這一點)。 – JohnLBevan

+1

我使用'[^ ​​\「]'而不是''',因爲它只會匹配到下一個'」',而不是字符串尾部需要反向跟蹤。 – Oded

0

取決於其正則表達式引擎你使用。給定一個Perl或Java引擎,這是我看到的錯誤。

\b是不必要的

\\lyrics\\*應該/lyrics/.*(如Perl中,那麼你就需要逃跑的/爲好。)

+0

有了'''的轉義符和''''中包含正則表達式的事實,並且行以';'結尾的事實,我假定Java或C#。 – Oded

+0

雖然,我正在使用Php。它可能看起來像另一種語言,因爲我對此比較陌生。它有重大的不同嗎? – iyop45

+0

在這種情況下,並非如此。有許多不同的正則表達式引擎的存在,並且許多使用相同的運營商,但一些命令行實用程序(例如grep的)是完全不同的。對於未來的正則表達式的問題,這將有助於以指示你正在使用你的表達,所以我們不必從後推斷出這一點。 ;) –

相關問題