2 つの @ 記号の間にある部分文字列を見つけるための正規表現を修正するのを手伝ってくれませんか。
例-fghgkghfk@hello@ggjgkglgll@hello@ghfufjkfk.
今、私はそれらの 2 つの HELLO サブ文字列を取得したいと考えています。前もって感謝します。これは、データを取得する際のパターン マッチングに役立ちます。
2 つの @ 記号の間にある部分文字列を見つけるための正規表現を修正するのを手伝ってくれませんか。
例-fghgkghfk@hello@ggjgkglgll@hello@ghfufjkfk.
今、私はそれらの 2 つの HELLO サブ文字列を取得したいと考えています。前もって感謝します。これは、データを取得する際のパターン マッチングに役立ちます。
@
これにより、文字間のテキストが一致します。
(?<=@).*?(?=@)
これらはどちらかの端でのルックアラウンドであり (非消費マッチ)、私は非貪欲なマッチを使用しているため、マッチは次の @
囲まれたマッチの終わりまで実行されません。
そのようなフレーズをすべて抽出するエレガントなワンライナーが必要な場合は、次のようにします。
String[] phrases = input.replaceAll("(^.*?@)|(@[^@]*$)", "").split("@.*?@");
ここにいくつかのテストコードがあります:
public static void main(String[] args) {
String input = "fghgkghfk@hello@ggjgkglgll@hello@ghfufjkfk";
String[] phrases = input.replaceAll("(^.*?@)|(@[^@]*$)", "").split("@.*?@");
System.out.println(Arrays.toString(phrases));
}
出力:
[hello, hello]
String text = "fghgkghfk@hello1@ggjgkglgll@hello2@ghfufjkfk";
Pattern ptrn = Pattern.compile("@(\\w+)@");
Matcher mtchr = ptrn.matcher(text);
while(mtchr.find())
{
String match = mtchr.group(1);
System.out.println("Match = <" + match + ">");
}
間の文字列の単純な正規表現@
:
'@(.*?)@'
説明:
@ # Match starts at literal @
(.*?) # Capture everything inbetween (non-greedy)
@ # Match ends at literal @
ここで実際の動作を確認してください。