2

私は今かなり探し回っていますが、私の状況でうまくいくための提案を得ることができません。否定的な先読みや後読みで成功を見てきましたが、本当に理解できません。

RegExp を使用してテキスト ブロック内の URL を検索したいのですが、引用された場合は無視します。まだ完全ではありませんが、URL を見つけるために次の方法があります。

(https?\://)?(\w+\.)+\w{2,}(:[0-9])?\/?((/?\w+)+)?(\.\w+)?

私はそれを次のように一致させたい:

www.test.com:50/stuff
http://player.vimeo.com/video/63317960
odd.name.amazone.com/pizza

しかし一致しません:

"www.test.com:50/stuff
http://plAyerz.vimeo.com/video/63317960"
"odd.name.amazone.com/pizza"

編集:

明確にするために、式を通じてテキストの段落全体を渡すことができます。私が以下に欲しいもののサンプル段落:

次のリンクがwww.example.comにあることを望みます。ただし、このリンクは無視する必要があります"www.example.com"「www.example.comwww.example.com」も無視すると便利ですが、必須ではありません。

以下で作業している別のサンプル。言語はphpです:

$articleEntry = "Hey guys! Check out this cool video on Vimeo: player.vimeo.com/video/63317960";

$pattern = array('/\n+/', '/(https?\:\/\/)?(player\.vimeo\.com\/video\/[0-9]+)/');
                    
$replace = array('<br/><br/>',
    '<iframe src="http://$2?color=40cc20" width="500" height="281" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>'); 
    $articleEntry = preg_replace($pattern,$replace,$articleEntry);

上記の結果は、改行 "\n" を 2 つの改行 "

" に置き換え、Vimeo アドレスを iframe とリンクに置き換えることで Vimeo ビデオを埋め込みます。

4

2 に答える 2

2

私は解決策を見つけました!

(?=(([^"]+"){2})*[^"]*$)((https?:\/\/)?(\w+\.)+\w{2,}(:[0-9]+)?((\/\w+)+(\.\w+)?)?\/?)

(? から *$) までの最初の部分は、私にとって何がうまくいくかです。これはJava Regex - split but ignore text inside quotes?の回答として見つかりましたか? https://stackoverflow.com/users/548225/anubhavaによる

以前にその質問を読んだことはありましたが、質問を「解決」したものではなかったため、彼の答えを見落としていました。一重引用符を二重引用符に変更したところ、うまくいきました。

于 2013-08-18T09:05:03.997 に答える
0

^$を正規表現に追加します

 ^(https?\://)?(\w+\.)+\w{2,}(:[0-9])?\/?((/?\w+)+)?(\.\w+)?$

http の後のスラッシュをエスケープする必要があるかもしれないことに注意してください (つまりhttps?\:\/\/)

アップデート

大文字と小文字を区別する場合は、\wbutを使用しないでください[a-z]。\w にはすべての文字と数字が含まれているため、使用する際には注意が必要です。

于 2013-08-07T12:39:18.993 に答える