Ну, я застрял, я не могу найти правильную форму для RegEx, чтобы предоставить PHP preg_match.
У меня есть две строки. Сказать "mdo"
а также "o"
, но они могут быть действительно случайными.
У меня есть словарь разрешенных символов и строк.
Например, допустимые символы "a-gm0-9"
и допустимые строки "do"
а также "si"
,
ЦЕЛЬ
Я пытаюсь проверить, что входная строка не содержит символов или строк но те, в словаре, без учета регистра.
Так что дело "mdo"
не будет соответствовать, потому что m
допускается так же, как строка do
, Не то же самое для o
вместо этого, который имеет o
это не разрешенный символ и который не содержит всю разрешенную строку do
,
Моя борющаяся причина
Это нормально отрицать [^a-gm0-9]
а также (?!do|si)
, но я не могу добиться их размещения внутри одного регулярного выражения, чтобы применить следующий код PHP:
<?php
$inputStr = 'mdo';
$rex = '/?????/i'; // the question subject
// if disallowed chars/strings are found...
if( preg_match($regex, $inputStr) == 1 )
return false; // the $inputStr is not valid
return true;
?>
Потому что два каскадных preg_matches сломают логику и не будут работать.
Как смешать проверку символов и групп проверки в «И» в одном регулярном выражении? Их позиции не имеют значения.
Вы можете использовать этот шаблон:
return (bool) preg_match('~^(?:do|si|[a-gm0-9])*+\C~i', $inputStr);
Идея состоит в том, чтобы сопоставить все допустимые символы и подстроки с самого начала в повторяющейся группе с собственнический квантификатор и проверить, если один байт \C
остается. Поскольку квантификатор является жадным и притяжательным, нельзя допустить использование одного байта после, если он найден.
Обратите внимание, что в большинстве случаев проще отрицать preg_match
функция, пример:
return (bool) !preg_match('~^(?:do|si|[a-gm0-9])*$~iD', $inputStr);
(или с +
квантификатор, если вы не хотите разрешать пустые строки)
Других решений пока нет …