2014-11-12 2 views
1

Так что я, по общему признанию, жалкий с регулярными выражениями, поэтому, если бы кто-то мог мне немного помочь в этом отношении, чтобы выяснить, как я могу выполнить определенный поиск; но и то, как на самом деле работает прикладное регулярное выражение, я был бы в восторге.Как я могу найти «пользовательский тег», используя регулярное выражение?

Я пытаюсь добиться размещения/замены «изменяемого пользователем тега» в фреймворке, который я создаю.

Пример выглядит следующим образом:

$ReplacementOpenTag = "[{"; 
$ReplacementCloseTag = "}]"; 

$SomeRegex = "$ReplacementOpenTag(...)$ReplacementCloseTag"; 
$Matches = array(); 

if(preg_match_all($ReplacementSubject,$SomeRegex,&$Matches) <= 0) 
    return; 
else 
    foreach($Matches as $Match) // <--- Match? 
     echo($Match[0]); // <--- Right? 

Где пользователь сможет установить открывающийся и закрывающийся тэг сказать - «< {» или «[|» если это так наклонно - если по какой-то причине мои «стандартные» теги не подходят для их нужд.

Теперь ... Я чувствую, что это кажется слишком легким - но через некоторое время пошатываясь в http://tryphpregex.com/ и приближаясь, я неоднократно полагаю, что пришло время посмотреть, смогу ли я получить быстрое и простое решение для этого предположительно легкое регулярное выражение, чтобы я мог его рассеять и выяснить, что мне не хватает.

Я чувствую, что должен быть «Stupid-вопрос» Тег ...

+0

возможно дубликат [шаблон регулярного выражения не соответствует где-либо в строке] (http://stackoverflow.com/questions/4231382/regular-expression-pattern- not-matching-where-in-string) –

ответ

1

Во-первых, избежать ваши разделители, так как они могут содержать специальные символы (и в вашем примере, они делают):

$ReplacementOpenTag = preg_quote($ReplacementOpenTag); 
$ReplacementCloseTag = preg_quote($ReplacementCloseTag); 

Далее, построить регулярное выражение, используя nongreedy шаблон между ограничителями:

$SomeRegex = "/$ReplacementOpenTag(.*?)$ReplacementCloseTag/s"; 

Тогда просто использовать его как этот

preg_match_all($SomeRegex, $ReplacementSubject, $Matches); 

Или, для замены:

preg_replace($SomeRegex, "<b>$1</b>", $ReplacementSubject); 
+0

Очень ценю - у меня есть только один вопрос для вас на данный момент, поскольку я пытаюсь проверить это - как мне «вручную» убежать от моих разделителей? Я сбросил это: «<{(*.?)}>» в этот тестер регулярных выражений и, как и ожидалось, у него плохой шаблон - я пробовал свертки в обоих направлениях безрезультатно: - /. Я просто хочу быть основательным ради моего понимания. – DigitalJedi805

+1

Посмотрите, какие символы выходят из ['preg_quote'] (http://php.net/manual/en/function.preg-quote.php) и избегают их с помощью обратного слэша. Для вашего примера: '<\{(.*?)\}>'. ('preg_quote' escapes' <' and '> 'тоже, но в вашем случае это не нужно.' \ <\{(.*?)\}\> 'тоже будет действительным. –

+0

Право на - спасибо. Я считаю, что я просто полностью потерял веру в этот тестер регулярных выражений, поскольку точное копирование/вставка все еще не удалось. Я буду реализовывать его и отчитываться, если у меня возникнут проблемы. * cheers * – DigitalJedi805

Смежные вопросы