2011-04-19 2 views
1

у меня есть это правило preg_match:preg_match вопрос

preg_match('#(http:\/\/(www.)?imgur.com)\/(gallery\/)?(([-|~_0-9A-Za-z]+)&?.*?)#i', $link, $matches) 

этот матч для

http://imgur.com/xxxx 
http://www.imgur.com/xxxx 
http://imgur.com/gallery/xxxx 

, как я могу избежать, чтобы соответствовать с imgur.com/a/xxxx#xxxx?

+0

Что именно не следует сопоставлять? '/ a /'? '# xxxx'? И то и другое? Только вместе или самостоятельно? –

+0

будет соответствовать всем, прежде чем просто избегать/a/ – greenbandit

+0

Вы соответствуете строке или пытаетесь найти ее в другой строке? Казалось бы, бывший ... – alex

ответ

2

Я не уверен, если это то, что вы хотите:

preg_match('#(http:\/\/(www.)?imgur.com)\/(?!a)(gallery\/)?(([-|~_0-9A-Za-z]+)&?.*?)#i', $link, $matches) 

С этим URL, как http://imgur.com/a/xxxxxx не будет соответствовать.

PS: Хотя в зависимости от того, что вы делаете, я думаю, что регулярное выражение может стать излишне сложным, и вы должны попытаться найти более простые методы. Посмотрите на мой ответ здесь, касающийся разбора URL-адресов: Would a regular expression be best for this problem?

+0

это работает, спасибо. – greenbandit

0

Вы можете обнаружить URL-адреса, а затем передать их parse_url(), где вы можете отключить их из своих совпадений, если они содержат этот путь.

Возможно, будет легче читать :)

+0

хорошая идея, я собираюсь попробовать. ^^ – greenbandit