[英]Using Regular Expressions
我在嘗試使用我在 JavaScript 中使用的正則表達式時遇到問題。 在網頁上,您可能有:
<b>Renewal Date:</b> 03 May 2010</td>
我只是希望能夠抽出 2010 年 5 月 3 日,記住一個網頁不僅僅包含上述內容。 我目前使用 JavaScript 執行此操作的方式是:
DateStr = /<b>Renewal Date:<\/b>(.+?)<\/td>/.exec(returnedHTMLPage);
我試圖按照一些關於java.util.regex.Pattern
和java.util.regex.Matcher
教程進行操作,但沒有成功。 我似乎無法將(.+?)翻譯成他們能理解的東西??
謝謝,
諾內爾
這就是 Java 中正則表達式的使用方式:
Pattern p = Pattern.compile("<b>Renewal Date:</b>(.+?)</td>");
Matcher m = p.matcher(returnedHTMLPage);
if (m.find()) // find the next match (and "generate the groups")
System.out.println(m.group(1)); // prints whatever the .+? expression matched.
Matcher 類中還有其他有用的方法,例如m.matches()
。 看看Matcher 。
matches
與find
問題是您在應該使用find
時使用了matches
。 從API :
matches
方法嘗試將整個輸入序列與模式進行匹配。find
方法掃描輸入序列,尋找與模式匹配的下一個子序列。
請注意, String.matches(String regex)
還會查找整個字符串的完整匹配項。 不幸的是String
不提供部分正則表達式匹配,但你總是可以s.matches(".*pattern.*")
代替。
Java 完全理解(.+?)
。
這是一個演示:給定一個字符串s
,它由至少重復兩次的字符串t
組成。 找到t
。
System.out.println("hahahaha".replaceAll("^(.+)\\1+$", "($1)"));
// prints "(haha)" -- greedy takes longest possible
System.out.println("hahahaha".replaceAll("^(.+?)\\1+$", "($1)"));
// prints "(ha)" -- reluctant takes shortest possible
還應該說您不必要地將\\
注入了正則表達式( "\\\\"
作為 Java 字符串文字)。
String regexDate = "<b>Expiry Date:<\\/b>(.+?)<\\/td>";
^^ ^^
Pattern p2 = Pattern.compile("<b>Expiry Date:<\\/b>");
^^
\\
用於轉義正則表達式元字符。 A /
不是正則表達式元字符。
好的,所以使用 aioobe 的原始建議(我之前也嘗試過),我有:
String regexDate = "<b>Expiry Date:</b>(.+?)</td>";
Pattern p = Pattern.compile(regexDate);
Matcher m = p.matcher(returnedHTML);
if (m.matches()) // check if it matches (and "generate the groups")
{
System.out.println("*******REGEX RESULT*******");
System.out.println(m.group(1)); // prints whatever the .+? expression matched.
System.out.println("*******REGEX RESULT*******");
}
IF 語句必須不斷出現 FALSE,因為 *******REGEX RESULT******* 永遠不會輸出。
如果有人錯過了我想要實現的目標,我只是想確定日期。 在 html 頁面中有一個類似<b>Expiry Date:</b> 03 May 2010</td>
,我想要 2010 年 5 月 3 日。
(.+?)
是一個奇怪的選擇。 試試( *[0-9]+ *[A-Za-z]+ *[0-9]+ *)
或者只是([^<]+)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.