3

一般的に正規表現に慣れていないので、それらについてもっと読み始めますので、優しくしてください:-)

my("またはで始まるすべての単語を検索したいmy('。単語自体には、アンダースコア、文字、数字、基本的には任意の文字を含めることができます。")ただし、またはで終わる必要があり')ます。

だから私は次のことを試しました:

Pattern.compile("_(\"(.*)\")"); // for underscores first, instead of my

Pattern.compile("(my)(\"(.*)\")");

しかし、これは私に他のことも返します、そして私はなぜそしてどこで私が思考の間違いを犯したのか分かりません...

ありがとう

4

3 に答える 3

2

一致させたいが、一致させたくない場合my("xxx")my('xxx')my("xxx')次の式を試してください。

my\((?:"[^"]*"|'[^']*')\)

式の簡単な内訳は次のとおりです。

  • my\(...\) 試合はで始まり、my(で終わる必要があることを意味します)
  • (?:"[^"]*"|'[^']*')二重引用符または一重引用符で囲まれた文字のシーケンスを意味します(したがって、文字クラスは「二重引用符ではない任意の文字」または「一重引用符ではない任意の文字」を意味します)

編集:

式の問題(my)("(.*)")は、それが貪欲であり、一致するものが何にでも一致するため、一致は最初に開始されmy("ますが、最後に終了することです。したがって、一致するため、一致します。").*my("xxx") your("yyy").*xxx") your("yyy

正規表現の詳細については、http://www.regular-expressions.infoを参照してください。

于 2012-05-18T09:01:29.190 に答える
0

正規表現では、角かっこ((および))は実際には予約文字であるため、それらをエスケープする必要があります。したがって、この正規表現はトリックを実行する必要があります_\\(\"(.*)\"\\)ただし、で始まりmy(終わる必要のある単語を検索したいとも述べました")。したがって、次のようなアンカーを追加する必要があります^my\\([\"'](.*)[\"']\\)$。これは、またはで始まり、またはで終わるすべての文字列と一致する必要がmy("ありmy("'ます。")')

^とは$アンカーです。は^、文字列の先頭から一致を開始する$ように正規表現エンジンに指示し、文字列の最後で一致を停止するように正規表現エンジンに指示します。これらのアンカーを削除すると、次のものが一致と見なされます:、、foo my('...') barなどmy("...") bar

my("...')ただし、これは区別せず、やのような文字列にも一致しmy('...")ます。

于 2012-05-18T09:03:01.170 に答える
0

単語境界オプションを使用し、

\bmy\((["']).*?\1\)(?:\b|$)
于 2012-05-18T09:20:06.860 に答える