この正規表現が機能しない理由は何ですか?
'#((http://|www.)(.*^(youtube)\.(com|org|co.il|net|us|ws|info|tv|me|tk|co.uk).*))#'
YouTube に属さないリンクを見つけたい。
正規表現に次のセグメントがあります。^(youtube)
これは string を否定しないことに注意してくださいyoutube
。
次のようなテキストの一致を否定するには、否定先読みまたは後読みが必要です。
(?!youtube)
また
(?<!youtube)
正規表現の場合、次のようになります。
#((http://|www.)((?!youtube)[^.]+\.(com|org|co.il|net|us|ws|info|tv|me|tk|co.uk).*))#
ただし、質問内で入力文字列のサンプルを提供する必要があります。
私なら逆に行きます
$youtubePattern = '%(https?:\/\/(www\.)?youtube\.([a-z]{2,3}).*)%six';
if (!preg_match($youtubePattern, $subject)) {
// not youtube, do whatever...
}