2011-11-23 17 views
3

これが動作しないコードです:正規表現(するpreg_match)

<?php 
$matchWith = " http://videosite.com/ID123 "; 
preg_match_all('/\S\/videosite\.com\/(\w+)\S/i', $matchWith, $matches); 
foreach($matches[1] as $value) 
{ 
    print '<a href="http://videosite.com/'.$value.'">Hyperlink</a>';   
} 
?> 

私が欲しいものは、それが前または後に空白がある場合、それはリンクが表示されないということです。 これで、何も表示されません。しかしそれはまだリンクを表示します。

+1

によると、それがreg expと一致する場合、何も表示してはならず、ちょうど反対のことをしているはずです。開始と終了に空白がある場合は、印刷します。 :) – mithunsatheesh

答えて

2

3はスペースではないため、http:/はスペースではないため、ID12と一致する可能性があります。試してみることができます:

preg_match_all('/^\S*\/videosite\.com\/(\w+)\S*$/i', $matchWith, $matches); 
+0

ありがとう、これは私が探していた答えでした。 – Helena

2

したがって、空白がある場合は表示したくありません。このようなものはうまくいくはずです、テストしませんでした。

preg_match_all('/^\S+?videosite\.com\/(\w+)\S+?$/i', $matchWith, $matches); 
+0

素晴らしい。私が探していた答え。しかし、別の問題があります。 IDがID123の場合(リンク内で)、ID12のみが表示されます。ありがとう – Helena

+0

する必要があります:/\s*\/videosite\com\/(\w+)\s*/i。 – Godwin

1

これを試すことができます。

if (preg_match('%^\S*?/videosite\.com/(\w+)(?!\S+)$%i', $subject, $regs)) { 
    #$result = $regs[0]; 
} 

をしかし、私は、私はこれを投稿した後、あなたがあなたの質問を更新することを肯定しています:)

説明:それは動作します

" 
^   # Assert position at the beginning of the string 
\S   # Match a single character that is a “non-whitespace character” 
    *?   # Between zero and unlimited times, as few times as possible, expanding as needed (lazy) 
\/   # Match the character “/” literally 
videosite # Match the characters “videosite” literally 
\.   # Match the character “.” literally 
com   # Match the characters “com” literally 
\/   # Match the character “/” literally 
(   # Match the regular expression below and capture its match into backreference number 1 
    \w   # Match a single character that is a “word character” (letters, digits, etc.) 
     +   # Between one and unlimited times, as many times as possible, giving back as needed (greedy) 
) 
(?!   # Assert that it is impossible to match the regex below starting at this position (negative lookahead) 
    \S   # Match a single character that is a “non-whitespace character” 
     +   # Between one and unlimited times, as many times as possible, giving back as needed (greedy) 
) 
\$   # Assert position at the end of the string (or before the line break at the end of the string, if any) 
" 
+0

すごくいい答え!信じられないほど!しかし、私は本当に愚かなnoobですし、私のコードにこのコードを統合することはできません。しかし、別のコードが働いていましたが、まだあなたに感謝します。皆さんは素晴らしいです。 – Helena

0

おそらくこれを使用する方が簡単だろう正規表現:

'/^http:\/\/videosite\.com\/(\w+)$/i' 

私はあなたが空白はhttpの前に、空白はディレクトリの後になります。そのため、^文字を使用して、文字列がhttpで始まることを示し、最後に$文字を使用して、文字列で終わらなければならないことを示す必要があります。

+0

私が探していた答えがあります。まだ非常にありがとう:) – Helena

関連する問題