2015-05-10 2 views
-1

Я создаю регулярное выражение, которое должно соответствовать всем следующим образом: [[First example]] или [[I'm an example]].Почему мое регулярное выражение отвергает апострофы?

К сожалению, это не соответствует [[I'm an example]] из-за апострофа.

Здесь:

preg_replace_callback('/\[\[([^?"`*%#\\\\:<>]+)\]\]/iU', ...) 

Простого апостроф (') разрешен, так что я действительно не понимаю, почему он не работает.

Любые идеи?

EDIT: Вот что происходит, прежде чем я использую это регулярное выражение

// This match something [[[like this]]] 
$contents = preg_replace_callback('/\[\[\[(.+)\]\]\]/isU',function($matches) { 
    return '<blockquote>'.$matches[1].'</blockquote>'; 
}, $contents); 

// This match something [[like that]] but doesn't work with apostrophe/quote when 
// the first preg_replace_callback has done his job 
$contents = preg_replace_callback('/\[\[([^?"`*%#\\\\:<>]+)\]\]/iU', ..., $contents); 
+2

Это делает work.Try с 'preg_match_all' HTTPS : //regex101.com/r/oF9hR9/5 – vks

+0

@vks Я использую 'preg_replace_callback' (исправленный) –

+0

символ рядом с' '' там. это должна быть цитата? это галочка '\' ', а не одна цитата' '' - всего двух разных животных –

ответ

0

попробовать это:

$string = '[[First example]]'; 
$pattern = '/\[\[(.*?)\]\]/'; 
preg_match ($pattern, $string, $matchs); 
var_dump ($matchs); 
+0

мы можем сначала попытаться выяснить, почему их код не работает, а не drop-in * "try this" *? возможно, добавленное объяснение было бы приятным. –

+0

Предоставленное регулярное выражение работает так, зачем использовать более свободный? – chris85

+0

@ Fred-ii- Я добавил некоторые детали к моему вопросу –

0

Вы можете использовать это регулярное выражение:

\[\[.*?]] 

Working demo

Php код

$re = '/\[\[.*?]]/'; 
$str = "not match this but [[Match this example]] and not this"; 

preg_match_all($re, $str, $matches); 

Btw, если вы хотите, чтобы захватить содержимое в скобках вы должны использовать захватив группы:

\[\[(.*?)]]