2010-12-06 8 views
4

少し正規表現の問題を無視します。私は、これが一致したURL正規表現は、私はこの上のあなたの助けを必要とするので、私は正規表現での経験がほとんどない</p> <p>:)をしないもののために不可能知っているもののためにパイとして簡単に、ユーチューブ

[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/] 

と一致するパターンを持つすべてのURLの私はちょうどそれが「youtube.com」URLの以外のすべてのURLのと一致するように、この正規表現を変更する必要があります。

http://www.google.com MATCH 
http://example.com MATCH 
http://asdasdasfsadfsdfasfsdfs.com MATCH 
http://www.youtube.com MUST NOT MATCH 
http://youtube.com MUST NOT MATCH 

(私はあなたがポイントだと思います)

は、事前にみんなにありがとう!私はcodaddictの答えの若干の修正を提案

^(?!http:\/\/(?:www\.)?youtube\.com).*$ 

See it

+0

ああ、私はほとんど 'も忘れてしまっているあなたのコメント

私の提案を読んだ後のhttp:// HTTP: - 文字の数字は、[\.\-A-Za-z0-9]

編集(も[\w\.\-]が動作します)アンダースコア//www.youtube.com/watch?v = dQw4w9WgXcQ'は一致してはいけません – karman888

+0

人がリンクをクリックしないようにするには、バッククォート '\' 'で囲みます(' 'コードとしてフォーマットする ')。 –

+0

フェリックスの「チップ」に感謝!!! :) – karman888

答えて

2

あなたは否定先読みを使用することができます

^(?!http:\/\/(?:.*\.)*youtube\.com).*$ 

これはまた、youtube.comの他のサブドメインを破棄します。

+0

このソリューションを元のregexと組み合わせて、不要なURL以外のフォーマットされた文字列を取り除くことができます: '^(?: http:\/\ /(?: www \。)?youtube \ [:alpha:]] +:// [^ <> [:スペース:]] + [[:alnum:] /] $ ' – tinifni

+0

私は '$ active_links_text = ereg_replace("(?:http:\/\ /)?youtube \ .com)[[:alpha:]] +:// [^ <>あなたが見ることができるように、私はyoutubeのものを除いて "アクティブ"の文字列の中にリンクを作ろうとしています。 'http:\\ www.google.com'は' http:\\www.google.com 'になりますが、うまくいきません。私は警告を得る:ereg_replace()[function.ereg-replace]:REG_BADRPT – karman888

+0

このパターンは$ original_textのどこにでもあることができるのを忘れていたので、^記号を取り除いた(私はそれが正しいかどうかわからない!) – karman888

2

:として

+0

不正な形式のURLにも一致します。 D'oh。 –

+0

'http://sitereport.com/search?q=youtube 'を除外するようです。com」または「http://」で始まり、「.youtube.com」が含まれているもの。それが重要かどうかわからない。 –

1

変更は

にあなたの正規表現は、ここで

[[:alpha:]]+://(?!(?:[^:/ ]+\.)?youtube.com)[^<>[:space:]]+[[:alnum:]/]

テスト:http://rubular.com/r/Am4YFcCsf9

重要な部分は、ニンジンは//とyoutube.comの間ではないかもしれないものを言います。この[^:/ ]

です。タブ[^:/ \t]を許可しないように、または特定の文字だけを許可するように変更することができます。今

[[:alpha:]]+://(?!(?:https?:/+)*(?:[^:/ ]+\.)?youtube.com)[^<>[:space:]]+[[:alnum:]/]