簡體   English   中英

Java正則表達式 - 多行

[英]Java regular expression - multiline

我有一個帶字符串的大數組。 我需要使用數組中的字符串來形成模式。 但是,對於文本中的字符串可能跨越幾行。 構造的模式不適用於多行標志。 誰能指出出了什么問題? 謝謝。

這是我的代碼:

String[] phrases = new String[2];
    phrases[0] = "student (male)";
    phrases[1] = "worker (female)";

    Pattern[] ptn = new Pattern[phrases.length];

    int i = 0;
    for (String p : phrases)
    {
        p = Pattern.quote(p);
        System.out.println(p);
        ptn[i] = Pattern.compile(p+"\\:\\s\\w+",Pattern.MULTILINE);
        i++;
    }

    String text = "student\n(male): John";
    System.out.println(text);

    for(Pattern p : ptn)
    {
        Matcher m = p.matcher(text);
        while(m.find())
        {
            System.out.println(m.group());
        }
    }

在這里,您不需要MULTILINE標志:

正如@fge之前解釋的那樣,該標志僅表示^ (和$ )將匹配測試的String中行的開始 (和結束 )。
提醒:默認行為(沒有該標志)會導致^$分別匹配整個String的開頭和結尾。


如果你想在某個時候匹配一個空格或一個新行 ,我建議你嘗試匹配\\s

但是,如果您替換以下行:

phrases[0] = "student (male)";
phrases[1] = "worker (female)";

通過:

phrases[0] = "student\\s(male)";
phrases[1] = "worker\\s(female)";

然后,您將無法使用Pattern#quote轉義括號。 我相信最簡單的方法是直接逃脫它們,如下所示:

phrases[0] = "student\\s\\(male\\)";
phrases[1] = "worker\\s\\(female\\)";

如果您實際上無法修改這些字符串,您可能只需更改:

p = Pattern.quote(p);

對於:

p = p.replaceAll("(\\(|\\))", "\\\\"+"$1").replaceAll(" ", "\\\\s");

這將:

  • 逃避()
  • 更換空間( \\s匹配空格或新行。

這是一個Ideone鏈接到一些代碼可能的可執行示例:)

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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