正規表現の初心者として、私は単純すぎることを尋ねようとしていると信じていますが、とにかく質問するのは面倒です..
「hello 'cool1' word! 'cool2'」のようなテキスト があり、最初の引用のテキストを取得したいとしましょう ('cool1' ではありません)。
私のパターンは何ですか?マッチャーを使用する場合、2番目ではなく最初の引用のままであることをどのように保証しますか?
(正規表現のみで解決策を提案してください..)
この正規表現を使用します。
'([^'] *) '
次のように使用します: (ideone)
Pattern pattern = Pattern.compile("'([^']*)'");
Matcher matcher = pattern.matcher(s);
if (matcher.find()) {
System.out.println(matcher.group(1));
}
または、引用符で囲まれた文字列に改行文字がないことがわかっている場合は、次のようにします。
'(。*?)'
マッチャーを使用する場合、2番目ではなく最初の見積もりのままになることをどのように保証しますか?
左から右に検索を開始するため、最初に引用符で囲まれた文字列が最初に検索されます。次の一致を要求すると、2番目に引用された文字列が表示されます。
なしで最初の引用のテキストを検索したい場合は、次の'
ような先読みと後読みのメカニズムを使用できます/使用する必要があります
(?<=').*?(?=')
例えば
System.out.println("hello 'cool1' word! 'cool2'".replaceFirst("(?<=').*?(?=')", "ABC"));
//out -> hello 'ABC' word! 'cool2'
文字列を引用符で分割して、2番目の部分(最初の引用符と2番目の引用符の間にある)を取得することができます。
正規表現を主張する場合は、次のことを試してください。
/^.*?'(.*?)'/
入力に改行が含まれないことがわかっている場合を除き、マルチラインに設定されていることを確認してください。次に、結果からサブパターンを取得すると、それが文字列になります。
二重引用符もサポートするには:
/^.*?(['"])(.*?)\1/
次に、サブパターン2を取得します。