早上好。我意識到有很多問題關於替換和replaceAll()
,但我havnt見過這個。是否可以使用帶通配符的replaceAll()
我想要做的是解析一個字符串(其中包含有效的html到一個點),然後在字符串中看到<p>
的第二個實例後,我想刪除以&開頭的所有內容並以;直到我看到未來</p>
做的第二部分,我希望利用沿s.replaceAll("&*;","")
這不工作線的東西,但希望它得到我的點對面,我尋找替代任何開頭&結束於;
早上好。我意識到有很多問題關於替換和replaceAll()
,但我havnt見過這個。是否可以使用帶通配符的replaceAll()
我想要做的是解析一個字符串(其中包含有效的html到一個點),然後在字符串中看到<p>
的第二個實例後,我想刪除以&開頭的所有內容並以;直到我看到未來</p>
做的第二部分,我希望利用沿s.replaceAll("&*;","")
這不工作線的東西,但希望它得到我的點對面,我尋找替代任何開頭&結束於;
您應該將解析留給DOM解析器(see this question)。我幾乎可以保證你必須這樣做才能在<p>
標籤中找到文本。
對於替換邏輯,String.replaceAll
使用正則表達式,它可以做你想要的匹配。
您需要的正則表達式中的「通配符」是.*
表達式。用你的例子:
String ampStr = "This &escape;String";
String removed = ampStr.replaceAll("&.*;");
System.out.println(removed);
這個輸出This String
。這是因爲.
表示任何字符,並且*
表示「該字符0次或更多次」。所以.*
基本上是指「任意數量的字符」。然而,餵它:
"This &escape;String &anotherescape;Extended"
可能不會做你想做的,它會輸出This Extended
。要解決此問題,請指定您要查找的內容,而不是.
字符。這是使用[^;]
完成,這意味着這不分號「的任何字符:
String removed = ampStr.replaceAll("&[^;]*;");
這個擁有超過&.*?;
非匹配字符串的性能優勢,所以我強烈建議使用這個版本,特別是因爲不是所有的HTML文件將包含一個&abc;
令牌和&.*?;
版本可以有巨大的性能瓶頸結果。
你想表達的是:
s.replaceAll("&.*?;","");
但你真要解析HTML這樣?使用XML解析器可能會更好。
我認爲OP表示他們希望在「
」的第二個實例到「
」之後發生這種情況...此代碼刪除(和包括)&中的字符串中的任何部分。 –
糾正我,如果我錯了,但我想你想「
」和「
」在這個問題上表現出了,對嗎?你會想編輯你的問題並將這些字符串標記爲cod然後他們會出現,如果是這樣的話。 –