0

私が始めている正規表現は次のとおりです。

^(((http | ftp | https | www)://)?([\ w + ?. \ w +])+([a-zA-Z0-9 \〜!\ @#\ $ \%\ ^ \ &*()_- \ = + \ / \ ?. \:\; \'\、] *)?)$

これを使用して、ユーザーが入力したテキストの途中にあるURLを検索し、ハイパーリンクに置き換えています。これは正常に機能し、以下に一致します。

ただし、その両側にテキストがある場合は一致するものが見つかりません(私がやっていることの目的を損なうようなものです)。:)

歯が立たない:

  • www.google.comにアクセスします
  • www.google.comは最高です。
  • 私はいつもwww.google.comにアクセスしています。
  • 等...

文字列のどこに表示されても一致するようにこれを変更するにはどうすればよいですか?正規表現がひどいです...

4

2 に答える 2

3

元の正規表現にバグがあります。角かっこ\w+?\.\w+は文字クラスを作成します。

(((http|ftp|https|www)://)?([\w+?\.\w+])+([a-zA-Z0-9\~\!\@\#\$\%\^\&\*\(\)_\-\=\+\\\/\?\.\:\;\'\,]*)?)
                            ^         ^

それら(およびアンカー^$)を削除した後、正規表現は明らかな非URLと一致しなくなります。

正規表現内で構文が強調表示されているため、正規表現のテストにはhttp://regexpal.com/を使用することをお勧めします。

于 2012-12-17T04:26:05.857 に答える
0

私はあなたが前向きな見方を使うべきだと思います、それは最初に2つの可能性をチェックするために与えられたURLを検索するでしょう、それは文字列全体の最初か中途半端です。

しかし、^((?= url)?|。?(?= url)。*?$))のようなものを使用する必要があります。これはほんの始まりにすぎません。答えは提供していません。ただのアイデアです。私はそれをしますが、現時点では私は怠惰であり、あなたの正規表現は20分の分析を探します。

stackoverflowは私の例のいくつかのものを消去します

于 2012-12-17T05:17:15.337 に答える