10

私はDaring Fireball から Liberal URL Regex を採用し、それをAlan Storm の改善点のいくつかとマージし、括弧内の IDN 文字のサポートなどのいくつかのバグを修正する方法をハックしました。これは私が持っているものです:

/(?:[\w-]+:\/\/?|www[.])[^\s()<>]+(?:(?:\([^\s()<>]*\)[^\s()<>]*)+|[^[:punct:]\s]|\/)/

ただし、解決できないバグに遭遇しました。

'www.dsd(sd)sdsd.com' // can also be the valid 'www.dsd.com/whatever(whatever)'

上記の URL は(または) ではなく (または )としてwww.dsd(sd)sdsd.com'認識されています。これは、次の URL から、URL に括弧が含まれている場合にのみ発生するようです:www.dsd.com/whatever(whatever)'www.dsd(sd)sdsd.comwww.dsd.com/whatever(whatever)

'www.sampleurl.com'

として正しく認識されていwww.sampleurl.comます。

URLに括弧が含まれている場合、正規表現[^[:punct:]\s]|\/一部が実行されていないと思います。しばらく試してみましたが、解決策が見つからないようです。誰でも私を助けることができますか?

商品については、正規表現といくつかのテスト データを使用してRubular パーマリンクを設定しました(最後の URL は失敗します)。


Gruber の正規表現は少し急いでいたと思います。たとえば、次のような URL と一致しません。

http://en.wikipedia.org/wiki/Something_(Special)_For_You

GruberAlanの両方がこの本当に単純なタイプミスを見逃しているのを見て、私はさらに感銘を受けました。

\([\w\d]+\)

\(\w+\)十分ではないでしょうか?:S

4

3 に答える 3

4

Gruber が正規表現を修正したようです:

\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.])(?:[^\s()<>]+|\([^\s()<>]+\))+(?:\([^\s()<>]+\)|[^`!()\[\]{};:'".,<>?«»“”‘’\s]))

今は問題なく動作します

于 2010-01-14T08:01:08.740 に答える
1

www.dsd(sd)sdsd.comは有効なドメイン名ではありません。

持っていれば'www.dsd.com/whatever(whatever)'、正しく認識されます。(または少なくとも私のテストにあります)

于 2010-01-08T10:18:46.813 に答える
1
 /(?:[\w-]+:\/\/?|www[.])[^\s()<>]+(?:(?:\([^\s()<>]*\)[^\s()<>]*)+|[^[:punct:]\s]|\/)/
  www.                   |               |            |
                          dsd            |            |
                                          (sd)        |
                                                       sdsd.com'

それが私がこれが壊れていると思う方法です...上記の正規表現のビットは(sd)、エスケープされた開き括弧で始まり、次に見つめられた char class matching sd、次にエスケープされた閉じ括弧で始まり、次は[^\s()<>]*which に一致しsdsd.com'ます。

于 2010-01-12T00:29:15.917 に答える