1

dfowlerの優れた Jabbr プロジェクトのおかげで、ユーザーの投稿からリンクされたコンテンツを埋め込むコードを借りています。コードはこちらからのもので、正規表現を使用して URL を抽出し、追加の処理と埋め込みを行います。

私の場合、この埋め込みを試みる前に、まずマークダウン プロセッサを介してユーザーの投稿を実行します。マークダウン プロセッサ (MarkdownDeep) は、ユーザーがマークダウンを正しくフォーマットすると、指定された画像マークダウンを有効な HTML img タグに変換します。これはうまく機能しますが、埋め込みコンテンツ プロバイダーを使用すると、画像が 2 回表示されます。これは、画像がマークダウン変換から有効に表示され、その後も埋め込まれてしまうためです。

したがって、私の問題の解決策は、見つかった URL が有効な img タグ内に既に含まれている場合、一致しないように正規表現を変更することにあると思います。

これまでの正規表現への回答を簡単にするために、次のようにします。

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

この回答のように否定的な先読みを使用して img を除外したいと思いますが、正規表現の構文が苦手すぎて自分で実装できません。

注:テキストに表示されるだけの場合でも、画像と一致するようにします。したがってhttp://www.example.com/sites/default/files/DellComputer.jpg、一致するか、ハイパーリンクで<a href='http://www.example.com/sites/default/files/DellComputer.jpg'>は一致しますが、一致<img src='http://www.example.com/sites/default/files/DellComputer.jpg'>しません。

助けてくれてありがとう、私はあなたの何人かがサヴァンレベルの正規表現の才能を持っていることを知っています.

4

1 に答える 1

1

簡単なアプローチでは、前に追加するだけです

(?<!img.*)

正規表現の先頭に。imgすでに一致している場合と同じように一致しますが、行のどこかより前に来ると拒否されます。したがって、正規表現全体:

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

繰り返しますが、最初の数文字を除いて変更されていません。

行の前に がどこにあるかをより賢くする必要がある場合はimg、正規表現以外のツールを使用することをお勧めします。

于 2013-05-03T16:04:01.577 に答える