だから私は小さなCMSを構築していて、コンテンツエディタでHTMLを許可しないようにしたいと思います。そのため、カスタマイズを改善するために、テキスト内の生のURLを検出し、BBのようなタグをサポートしたいと考えています。
www.example.com
[link http://www.example.com]Click me[/link]
残念ながら、私は正規表現にかなり慣れていないので、これを機能させることができないようです。文字列に対して2つの正規表現を実行しています。1つ目は生のURLを検出し、2つ目はBBのようなURLを検出します。後者は完全に正常に機能しているようですが、前者は干渉し、タグでラップされたURLも変換します。
ここで見つけたコードから始めて、いくつか追加しました。
タグなしのURLのコードは次のとおりです。
/* don't match URLs preceeded by '[link ' */
(?<!\[link\s)
(
/* match all combinations of protocol and www. */
(\bhttps?://www\.|\bhttps?://|(?<!//)\bwww\.)
/* match URL (no changes made here) */
([^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))
/* but don't match if followed by [/link] - THIS DOESN'T WORK */
(?!\[/link\])
)
単語の文字ではないwww.
ので、前のネガティブな後ろ姿があり、それがないと次のようなものになります/
[link http://www.example.com]example[/link]
後も一致しhttp://
ます。
上記の正規表現は次の一致を生成します(http://gskinner.com/RegExr/でテスト済み、一致は太字http://
で示されています。これ以上URLを投稿することは許可されていないため、後にスペースを追加する必要がありました)。
www.example.com
http:// www.example.com http://example.com
[
リンクhttp://www.example.com]問題なし1[/link]
[リンクwww.example.com]問題なし2 [/ link]
[link http://www.example.com] http://www.example.com [/ link ]
私はネガティブな先読みを動かしてかっこで遊んでみましたが(かなり目的もなく)、成功しませんでした。
完全を期すために、タグマッチング正規表現(これは機能しているようです)を次に示します。
(?:\[link\s)(\bhttps?://|\bwww\.|\bhttps?://www\.)([^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))\](.*)(?:\[/link\])
誰かがすぐにエラーを見つけることができると確信しています。
よろしくお願いします!