php Pattern Matching для пользовательских тегов - PullRequest
0 голосов
/ 25 марта 2012

Я пытаюсь заменить все теги в файле, например {{name:something}}, на некоторые определенные значения. Обратите внимание, что в {{name::something}} только что-то может пугать. Как {{name:title}} или {{name:content}}. Это «имя» всегда будет там.

Во всяком случае, Я использовал preg_match_all и preg_replace, все получилось. Я нашел совпадения с этим регулярным выражением: $patmatch="/{{name:[a-zA-Z0-9._-]+}}/";

Моя проблема заключается в следующем:

Если такой тег не соответствует шаблону (у него есть синтаксическая ошибка), например {{notname:something}} или {{name something}} или {{ }}, я должен выдать исключение. Как узнать, есть ли тег, но с синтаксической ошибкой?

Могу ли я как-нибудь сделать другой поиск по шаблону, чтобы проверить, является ли он тегом (между {{ и }}) и не похож на {{name:something}}?

Буду признателен за любую помощь, Спасибо!

Ответы [ 3 ]

1 голос
/ 25 марта 2012

Другие ответы только проверяют, находится ли этот тег внутри контента, этот проверяет подлинность:

Предполагая, что у вас есть переменная $ content, которая содержит содержимое файла, вы можете временно сохранить данные проверки, которые будут такими:

$validation = preg_replace("/{{name:[a-zA-Z0-9._-]+}}/","",$content);

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

if(preg_match('/{{name:[^}]*}}/', $validation)) //found error tag
//alternatively you might want to check for typos like "nmae":
if(preg_match('/{{[^}]*}}/', $validation)) //found error tag
1 голос
/ 25 марта 2012

с макушки головы:

if(strpos($text, '{{name:') === false)
{
    //exception
}
else
{
    //properly formatted text
}

Что-то в этом роде?

0 голосов
/ 25 марта 2012

Может быть, вы можете использовать что-то вроде subpattern, naming и проверить результат

...