2 種類の文字を含むテキストから文字列を抽出しようとしています。文字は|と#であり、テキストは外部ソースからのものです。
例を挙げます:
- 入力:および
#hello|#what|whatsup|を返す必要がhello|ありwhatsupます。 - 入力:
#hello#返す必要がありますhello - 入力:
|ola|1返す必要がありますola - 入力:
|hello#|what#whatsup#node返す必要がhello#あり、whatsup
これは文字列で機能します。必要なものを完全に理解したかどうかはわかりませんが、必要に応じて調整できると思います。
String s1 = "#hello|#what|whatsup|";
String s2 = "#hello#";
String s3 = "|ola|1";
String s4 = "|hello#|what#whatsup#node";
Pattern pattern = Pattern.compile("((\\w)+)(\\||#)(\\||#)?");
Matcher matcher = pattern.matcher(s4);
while(matcher.find()) {
System.out.println(matcher.group(1) + (matcher.group(4) != null ? matcher.group(4).equals("|")? "#" : "|" : ""));
matcher.find(); //to jump over the next match
}
更新: middlerecursion の例を読んだところです。残念ながら、それはうまくいきません。しばらくの間、コンピューターから離れる必要があります。ですから、これはあなたが始めるためのものです。
すべての例で機能するバージョンを更新します。
String s1 = "#hello|#what|whatsup|";
String s2 = "#hello#";
String s3 = "|ola|1";
String s4 = "|hello#|what#whatsup#node";
String s5 = "#||##||MiddleRecursion||##||#";
Pattern pattern = Pattern.compile("(#|\\|)((#|\\|)*\\w+(#|\\|)*)(#|\\|)");
Matcher matcher = pattern.matcher(s1);
while(matcher.find()) {
System.out.println(matcher.group(2));
}
#||##||MiddleRecursion||##||#-->以来||##||MiddleRecursion||##||、残念ながらブラケット マッチングを行う必要があります。この場合、正規表現を使用した一般的な解決策はありません (| と # の最大連続出現数がわかっている場合は、強制的に機能させることができます)。その理由は、中間再帰があるからです。正規表現は、左または右の再帰のみを解決できます。
これは、正規表現で HTML 解析ができない理由の1 つでもあります。
わかりました、始めます。
したがって、#something# または |something| に一致する必要があります。
それを行う2つの別々の正規表現を書くことができますか?
最初にイライラするのは、パイプ|が正規表現の魔法の文字であることです。その文字で一致させたい場合は、\\リンクした他のスレッドに従って、プレフィックスを付ける必要があります。
これら 2 つの正規表現が機能するようになったら、お知らせください。さらに投稿します。
(私は数時間外出しています...)