簡體   English   中英

使用正則表達式

[英]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.Patternjava.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

matchesfind

問題是您在應該使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM