0

これがObjectiveCで作成した正規表現パターンです。

^\n?([#]{1,2}$|[*]{1,2}$|[0-9]{1,3}.$)

一致させたい:

  1. \nまたは空で始まる
  2. #または*またはで終わります。
  3. で終わる場合。間に1桁または2桁または3桁の数字があります
  4. #または*で終わる場合は、間に#または*がさらに1つある可能性があります

私が作成した正規表現は'\n1#'と一致しますが、これは私が望むものではありません。誰かが私がこれを修正するのを手伝ってもらえますか?これは最速ですか?正規表現は頻繁に使用されるので、できるだけ速くしたいと思います。

アップデート:

テスト用のサンプル文字列は次のとおりです。

"\n#", "11*1", "1#", "a1.", "111*", "\n1#", "\n11.", "a11.", "1. ", "*1."

1#111*が一致しました。何が悪かったのかわからない。

4

1 に答える 1

1

あなたは一致#1していて、その111#ためです[0-9]{1,3}.。をエスケープしておらず.、このグループは基本的に1〜3桁のシーケンスとそれに続く任意の文字に一致します。

あなたが探しているのは

^\n?(#{1,2}|\*{1,2}|[0-9]{1,3}\.)$

ObjCで適切にエスケープされた場合、

@"^\n?(#{1,2}|\\*{1,2}|[0-9]{1,3}\\.)$"

この正規表現が頻繁に使用される場合は、NSRegularExpressionオブジェクトをキャッシュして、毎回コンパイルしないようにすることができます。

Regexpalは、正規表現をテストするのに非常に便利です。

于 2013-01-27T22:12:04.247 に答える