В одиночку часть регулярного выражения работает. С частью, добавленной перед этим и другим после этого, это перестает работать - PullRequest
0 голосов
/ 07 января 2010

ОБНОВЛЕНИЕ: я делаю успехи, но это сложно!

Текст теста будет valid[REGEX_EMAIL|REGEX_PASSWORD|REGEX_TEST].

(Реальный текст required|valid[REGEX_EMAIL]|confirmed[emailconfirmation]|correct[not in|emailconfirmation|email confirmation].)

([^|]+) сохраняет REGEX_EMAIL, REGEX_PASSWORD и REGEX_TEST в массиве.

^[^[]+\[ совпадения действительны [

\] совпадений]

^[^[]+\[ + ([^|]+) + \] не сохраняет REGEX_EMAIL, REGEX_PASSWORD и REGEX_TEST в массиве.

Как решить?

1 Ответ

1 голос
/ 07 января 2010

Почему важно все попробовать одним регулярным выражением? Становится намного проще, если сначала извлечь две части, а затем разбить строки на |, используя explode:

$s = 'valid[REGEX_EMAIL|REGEX_PASSWORD|REGEX_TEST]';
$matches = array();
$s = preg_match('/^([^[]++)\[([^]]++)\]$/', $s, $matches);
$left = explode('|', $matches[1]);
$right = explode('|', $matches[2]);
print_r($left);
print_r($right);

Выход:

Array
(
    [0] => valid
)
Array
(
    [0] => REGEX_EMAIL
    [1] => REGEX_PASSWORD
    [2] => REGEX_TEST
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...