0

空白に一致する正規表現を作成しようとしていますが、これまでのところ、次のようにしています。

Powered[\s]*[bB]y.*MyBB

Regex Buddyで試してみたので動作するはずですが、Eclipseで実行しようとすると、有効なエスケープシーケンスではないというエラーがマークされ、正規表現をレンダリングする2つの「\」が自動的に追加されます役に立たない....誰かが私に何をすべきか教えてもらえますか? これまで\sの代わりにポイントを使用してきましたが、本当に必要なのは\sです...

ありがとう


追加

わかりましたが、「\s」は任意の空白文字に使用され、前述のように Regex Buddy もそれを認識します。「\s」を使用すると、Regex Buddy では認識されないため、テストは失敗しますが、Eclipse では失敗します。何にも一致しませんが、続けることができます... =/または何かを取得できませんでしたか?

4

2 に答える 2

3

「\」は Java のエスケープ文字を識別するため、単独で使用する場合はエスケープする必要があります。(\t はタブ、\n は改行など) エスケープするには、2 ではなく 1 '\' を追加する必要があります。

トリックを実行するJavaコードを次に示します。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.junit.Assert;
import org.junit.Test;


public class RegexTest {
    @Test
    public void testPatternWithWhiteSpace(){
        Pattern pattern = Pattern.compile("Powered\\s*[bB]y.*MyBB");
        Matcher matcher = pattern.matcher("Powered     By     MyBB");
        Assert.assertTrue(matcher.matches());
        matcher = pattern.matcher("Powered_By     MyBB");
        Assert.assertFalse(matcher.matches());
    }
}

空白の「トークン」(\s) を文字セット ([]) に入れる必要はありません。

\s は空白です。

正規表現が実際に記述されているため、Regex buddy には入力が必要です。Eclipse/ソース コードのリテラル文字列式はエスケープする必要があります。プロパティ ファイルなどからパターンを読み取る場合は、エスケープする必要はありません。

私が言ったように、Regex Buddy もそれをそのように認識し、\s を使用すると Regex Buddy で認識されないため、テストは失敗します

私はあなたが失敗したところにある日食を意味していると思いますか? これらの行をテストに追加するだけで、もう少し説明がつくかもしれません:

        matcher = pattern.matcher("Powered\t\n\r By     MyBB");
        Assert.assertTrue(matcher.matches());
        matcher = pattern.matcher("Powered\t\n\r ,By     MyBB");
        Assert.assertFalse(matcher.matches());
于 2008-12-30T13:58:23.007 に答える
1

Eclipse で正規表現を使用するとはどういう意味ですか? IDE で検索と置換を実行しようとしていますか、それとも Java コードで正規表現を使用しようとしていますか?

Java コードで正規表現を使用する場合は、RegexBuddy の [使用] タブで Java ソース コード スニペットを生成し、それをコードに貼り付けます。

正規表現のみを Java コードに貼り付ける準備を整えたい場合は、RegexBuddy の上部にあるツールバーで Java フレーバーを選択します。次に、[コピー] ボタンをクリックし、[正規表現を Java 文字列としてコピー] を選択します。RegexBuddy は、正規表現を Java 文字列として適切にフォーマットされたクリップボードにコピーします。正規表現は次のようにコピーされます。

"Powered[\\s]*[bB]y.*MyBB"

Java 文字列リテラルを使用して正規表現を格納する場合は、追加のバックスラッシュが不可欠です。

PS: [\s] の代わりに \s を使用できます。2 つのキーストロークを節約します。

于 2008-12-31T07:36:48.287 に答える