0

最近、ircbot の作成を開始しました。ban コマンドで、ターゲットの名前とモードを抽出する必要があります。

+と-の異なるモードがあります

したがって、文字列の一例は次のようになります

!!ban + Sjele

また

!!ban - Sjele

この場合、正規表現とターゲットを使用して - または + のいずれかのモードを見つけて取得するにはどうすればよいですか?

これをオンライン regextester regexpal で試してみましたが、うまくいきませんでした。

((.*)(+| -)(.*))

この正規表現が機能しているときにマッチャーとパターンを使用すると、3 つの変数が必要になります。

  • pref (!!ban である必要があります)
  • モード (- または +)
  • ターゲット (この場合は Sjele)

ありがとうございます
(英語は私の母国語ではなく、理解するのに苦労しています。不明な点があれば教えてください。よりよく説明できるように努めます。)

4

4 に答える 4

0

この正規表現を試すことができます:

!!ban\s*(\+|\-)\s*(\w+)

最初のグループにモードがあり、2番目のグループにターゲットがあります。

于 2013-03-15T21:45:56.570 に答える
0

この状況では、正規表現はやや過剰です。テストに を受け取り、探している文字でStringを返すメソッドを作成しました。または、一致する文字がない場合:Stringnull

public static String getBanStatus(String s1)
{
    if (s1.contains(Character.toString('+'))) return "+";
    if (s1.contains(Character.toString('-'))) return "-";
    else return null; // Or return something meaning no match was found
}

正規表現が必要な場合は、Pshemo が提供したもので十分です。

于 2013-03-15T21:18:29.353 に答える
0

正規表現を求めているので、で試すことができます!!ban ([+\\-]) (\\w+)。グループ 1 には + または - があり、グループ 2 には禁止/禁止されていないユーザーの名前が含まれます。

ここに簡単な例があります

Matcher m = Pattern.compile("!!ban ([+\\-]) (\\w+)").matcher(
        "!!ban - Sjele");
if (m.find())
    System.out.println(m.group(1) + ":" + m.group(2));

Java7 を使用している場合は、より適切なコードのためにグループに名前を付けることができます

!!ban (?<operation>[+\\-]) (?<userName>\\w+)

そして、このように使用します

Matcher m2 = Pattern
        .compile("!!ban (?<operation>[+\\-]) (?<userName>\\w+)").matcher(
                "!!ban - Sjele");
if (m2.find())
    System.out.println(m2.group("operation") + ":" + m2.group("userName"));
于 2013-03-15T21:19:22.950 に答える
0

+ と - 記号を \+ \- のようにエスケープする必要があります

それ以外の場合、正規表現コンパイラにとって特別な意味を持ちます。

于 2013-03-15T21:21:01.747 に答える