0

正規表現を使用して日付と文字列を一致させようとする単純なプログラムがあります。これが私のプログラムです

Pattern r = Pattern.compile("((?:january|february|march|april|may|june|july|august|september|october|november|december)\\s*\\d{1,2}\\,\\s*\\d{4})\\s*\\|\\s*UPDATED", Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
String textRegion = "<span>India Today Online</span>"
            + " New Delhi, October 28, 2013 | UPDATED 11:42 IST "
            + "</div>";
Matcher m = r.matcher(textRegion);
if (m.find()) {
    System.out.println("Matched");
} else {
    System.out.println("Not Matched");
}

しかし、このプログラムを実行すると「一致しません」と表示されますが、http: //gskinner.com/RegExr/で同じことを試してみると、一致した文字列が表示されます。私が間違っているところを理解するのを手伝ってください。

私は興味深い問題に直面しています。私は私のプログラムの 2 つの部分を持っています。最初の部分では、テキスト ファイルから文字列をコピーしました。問題を理解できません。

String textRegion = "<span>India Today Online</span>"
                + " New Delhi, October 28, 2013 | UPDATED  IST"
                + "</div>";
        Pattern r = Pattern.compile("((?:january|february|march|april|may|june|july|august|september|october|november|december)\\s*\\d{1,2}\\,\\s*\\d{4})\\s*\\|\\s*UPDATED", Pattern.CASE_INSENSITIVE | Pattern.DOTALL);

         System.out.println(textRegion);
        Matcher m = r.matcher(textRegion);
        if (m.find()) {
            System.out.println("Matched");
        } else {
            System.out.println("Not Matched");
        }



        Pattern r1 = Pattern.compile("((?:january|february|march|april|may|june|july|august|september|october|november|december)\\s*\\d{1,2}\\,\\s*\\d{4})\\s*\\|\\s*UPDATED", Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
        String textRegion1 = "<span>India Today Online</span>"
                    + " New Delhi, October 28, 2013 | UPDATED  IST"
                    + "</div>";
        Matcher m1 = r1.matcher(textRegion1);
        if (m1.find()) {
            System.out.println("Matched");
        } else {
            System.out.println("Not Matched");
        }

興味深いのは、ここからプログラムをコピーする場合です。私にとっても問題なく動作します。

4

2 に答える 2

0

正しいインポートを使用しているかどうかを確認してください。

import java.util.regex.Matcher;
import java.util.regex.Pattern;
于 2013-10-28T06:58:17.207 に答える
0

私が確認したところ、Java は Space と Non-breaking space (ここにリンクの説明を入力) を異なる方法で処理することがわかりました。これが、両方のコード部分で同じ結果が得られない理由です。コードに 1 行追加したところ、問題なく動作しました。

textRegion = textRegion.replaceAll("\\u00a0"," ");  

このコードは、Non-breaking Space を Space に置き換えます。プログラムで述べたように、テキストを別の場所からコピーし、コピーしたテキストにはスペースではなく非改行スペースが含まれていました。しかし、ここからすべてのコードをコピーすると、コピーしたコードには非改行スペースがなかったため、完全に正常に機能しました。

手伝ってくれてありがとう!

于 2013-10-29T05:39:54.660 に答える