Как создать PCRE-шаблон, соответствующий только при наличии 2 символов - PullRequest
1 голос
/ 11 мая 2011

В настоящее время я пытаюсь создать оптимизированные для SEO URL-адреса. Из-за этого я создал следующее регулярное выражение. То, что я хочу, это привести к другому URL, когда URL-адрес, например ::10000

da/something/something-else.html => 'da/pages/view/something/something-else'
something/something-else.html => 'pages/view/something/something-else'
something => 'pages/view/something'

Я создал это регулярное выражение:

'/(([a-z][^\/])(1))(?:(\/))([^.]+)\.html/' => '$1$2pages/view/$3/'

Необходимо, чтобы первая часть ДОЛЖНА БЫТЬ 2 ДЛИННЫМ ХАРАКТЕРА - если это не так, то это не языковой тег и не должен передаваться. Тогда остальные просто не должны иметь. (точка) внутри (из-за части ".html").

Возможно ли это?

Ответы [ 3 ]

3 голосов
/ 11 мая 2011

Попробуйте с:

$arr = array('da/something/something-else.html', 'something/something-else.html', 'something');
foreach ($arr as $str) {
    echo $str,' => ';
    $str = preg_replace("~^([a-z]{2}/|)([^.]*)(?:\.html)?$~", "$1pages/view/$2", $str);
    echo $str,"\n";
}

выход:

da/something/something-else.html => da/pages/view/something/something-else
something/something-else.html => pages/view/something/something-else
something => pages/view/something

объяснение можно посмотреть здесь

3 голосов
/ 11 мая 2011

Я не проверял это, но вы можете добавить ограничение к своему выражению следующим образом:

'#^/[a-z]{2}/(([a-z][^\/])(1))(?:(\/))([^.]+)\.html#' => '$1$2pages/view/$3/'

^ / [az] {2} / заставит иметь 2 [az] в начале(^) строки.

Я изменил разделитель с / на #, поэтому вам не нужно экранировать /.

пс.Коды языков могут содержать более 2 букв, если они содержат модификатор региона: pt_BR, pt_PT и en_US.

0 голосов
/ 11 мая 2011

Предполагая, что ваш предметный текст всегда является относительным URL, он должен это сделать:

$re = '%^([A-Za-z]{2}/)?(.*?)(\.html)?%i';
$url = preg_replace($re, '$1pages/view/$2', $url);

Редактировать: Исправлено удаление необязательного .html расширения.

...