2016-12-02 15 views
-1

私は正規表現で複数のパターンに一致するのが苦労しています。何が間違っているのだろうかと思います。正規表現で複数の式を一致させる

私のテスト文字列:https://api.github.com/repos/baxterthehacker/public-repo/releases/1261438

これらの作業期待通り:

/https:\/\/api\.github\.com\/repos\/ 

マッチ:https://api.github.com/repos/

/\/releases\/.* 

マッチ:/リリース/ 1261438

私の質問が行う方法です私は2つを1つのステートメントにまとめますか?これは私が試みたものですが、何らかの理由で最初のパターンと一致し、2番目のパターンと一致しません。

/(https:\/\/api\.github\.com\/repos\/)|(\/releases\/.*)/ 

マッチ:https://api.github.com/repos/

は私が間違って何をしているのですか?なぜ2番目のパターンは無視されますか?

+1

最後の正規表現はどのようにテストしましたか? https://regex101.com/r/K3VRZo/1を参照してください。 –

+0

グローバルフラグを追加することはそのトリックです。今すぐルビーをうまく動かす方法を理解する。 :)ありがとう! –

+0

ターゲット環境で正規表現を実行していないので、質問はoff = topicです。オンラインテスターでregexpsをテストする方法は話題にはなりません。実際の問題を示すために質問を編集したいのですか、それとも閉じますか? –

答えて

1

|ORの正規表現です。それはですではないを連結します。正規表現の文字列から|文字を削除し、その魔法を見てみましょう。

正規表現/(https:\/\/api\.github\.com\/repos\/).*(\/releases\/.*)/はこのトリックを行います。

+0

で正規表現のパターンをテストする方法であるため、このトピックをオフトピックとして閉じることにしましたが、これを(https://regex101.com/で)実行すると、文字列全体。私がRubyでやろうとしているのは、最初のパターンと2番目のパターンをマッチさせ、それらを取り除き、残っているものを残しておくことです。私が探しているのは「このパターンとこのパターンに一致する」ということです。これは可能ですか? –

+0

必要なグループ化( '()'の中のもの)は既に存在します。グループ化された部分式にアクセスする方法については、[here](http://stackoverflow.com/a/9304049/284416)を参照してください。それ以外の場合は、特別なマッチ変数** $ 1 .. $ n **を使用してアクセスしてください(詳細はこちら[こちら](http://stackoverflow.com/a/9304046/2844164))。これらの特殊なマッチ変数は、正規表現マッチングをサポートするほぼすべての言語で動作することに注意してください。 – Quirk

関連する問題