「:」(ない場合があります) と「@」の間の文字列からコンテンツを取得し、順序を保証するプログラムを作成します。 、または「123@my.com」の場合、「123」も取得します。だから私はそれを実装するために正規表現を書きますが、私は動作できません.最初のバージョンの背後にあります:
Pattern pattern = Pattern.compile("(?<=:?).*?(?=@)");
Matcher matcher = pattern.matcher("sip:+8610086@dmcw.com");
if (matcher.find()) {
Log.d("regex", matcher.group());
} else {
Log.d("regex", "not match");
}
最初のケース: "url:123@my.com" では結果が得られるため、機能しません: "url:123" 明らかに私が望むものではありません:
だから私は2番目のバージョンを書きます:
Pattern pattern = Pattern.compile("(?<=:??).*?(?=@)");
しかし、エラーが発生します。誰かが、Java は後読みで可変長をサポートしていないと言いました。
だから私は3番目のバージョンを試します:
Pattern pattern = Pattern.compile("(?<=:).*?(?=@)|.*?(?=@)");
その結果は最初のバージョンと同じですが、最初の条件を最初に考慮すべきではありませんか?
と同じ
Pattern pattern = Pattern.compile(".*?(?=@)|(?<=:).*?(?=@)");
左から右ではありません!以前は正規表現を理解していたと思いますが、再び混乱しました。とにかく事前に感謝します。