Значения по умолчанию в регулярных выражениях, если шаблон не совпадает - PullRequest
2 голосов
/ 14 марта 2011

Я пытаюсь построить шаблон регулярного выражения PHP, который бы:

  1. Захватить "openid", если тестовая строка "login / openid"
  2. Будет использовать «index», если тестовая строка просто «логин» (без завершающего слеша).

Логин (? / (+).)? - это будет захватывать все, что есть после косой черты, и работает нормально.

Однако можно ли создать регулярное выражение для предоставления значения по умолчанию, если шаблон НЕ соответствует (т. Е. Нет косой черты).

Пожалуйста, не предлагайте обходных путей, мне нужен только шаблон, если это вообще возможно.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 14 марта 2011

Нет, регулярные выражения могут соответствовать только тексту, который там есть, но не "изобретать" новый текст (например, значение по умолчанию).Так что вы не можете сделать это с помощью одного регулярного выражения.

Вам нужен оператор if:

if (preg_match('%login(?:/(.+))?%', $subject, $regs)) {
    $result = $regs[1];
} else {
    $result = "index";
}
1 голос
/ 14 марта 2011

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

Я думаю, что ваш единственный шанс - реализовать логику для значения «index» непосредственно в php.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...