2011-11-23 4 views
3

Это не рабочий код:Regular Expression (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

Это также может соответствовать ID12, потому что 3 не является пространством, а/из http:/не является пространством. Вы можете попробовать:

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

Awesome. Просто ответ, который я искал. Но есть еще одна проблема. Если (в ссылке) 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

Это, вероятно, будет проще использовать этот regex:

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

Я считаю, вы имеете в виду e пробел перед http и пробел после каталога. Итак, вы должны использовать символ ^, чтобы указать, что строка должна начинаться с http, и использовать символ $ в конце, чтобы указать, что строка должна заканчиваться символом слова.

+0

У меня есть ответ, который я искал. Еще большое спасибо :) – Helena