質問: ### 前提・実現したいこと 現在、URL等のパスを下記の正規表現で取得しているのですが、 これだと「+」の文字の入ったパスだと途切れて取得してしまいます。 (https://www.google.com/search?client=firefox-b-ab&ei=%E8%B0%B7+%E5%86%8D ~のようなパスです。) 下記の正規表現を修正する上で、「+」の文字の入ったパスにも対応させるには、どのような修正をすればよいでしょうか? ご教示お願い致します。 ### 該当のソースコード ``` /((http|https|ftp):\/\/[\w?=&.\/-;#~%-]+(?![\w\s?&.\/;#~%"=-]*>))/g ``` ### 試したこと 下記を試しましたが、ダメでした。 ``` /((http|https|ftp):\/\/[\w?=&.\/-;#~%-+]+(?![\w\s?&.\/;#~%"=-]*>))/g ``` ``` /((http|https|ftp):\/\/[\w?=&.\/-;#~%-\+]+(?![\w\s?&.\/;#~%"=-]*>))/g ```
回答: 正規表現で、`[]`の中にあるハイフン(`-`)は、**先頭・末尾にある場合**と**中間にある場合**で意味が変わります。 * 先頭・末尾にある場合...単なるハイフン * 中間にある場合...文字のグループを作る(`[0-9]`のようにできる) なので、最後に入っている`-`の後に`+`を入れると、ハイフンの意味が変わってしまいます。`...+-]`のように、ハイフンは最後に保ったままプラスを追加しましょう。