好吧,我被卡住了,我找不到正确的格式来让RegEx提供给PHP preg_match。
我有两个字符串。说"mdo"
和"o"
,但它们可能非常随机。
我有一个允许的字符和字符串的字典。
例如,允许的字符为"a-gm0-9"
,允许的字符串为"do"
和"si"
。
目标
我正在尝试检查输入字符串是否包含任何字符串或字符串,而不是字典中的字符串,不区分大小写。
因此"mdo"
的情况不匹配,因为m
被允许就像字符串do
一样。 o
不一样,o
不是允许的char,而且不包含整个允许的字符串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会破坏逻辑并且不起作用。
如何在单个正则表达式中混合使用字符检查和分组“AND”?他们的立场并不重要。
答案 0 :(得分:1)
您可以使用此模式:
return (bool) preg_match('~^(?:do|si|[a-gm0-9])*+\C~i', $inputStr);
我们的想法是在重复组中使用possessive quantifier匹配所有允许的字符和子字符串,并检查单个字节\C
是否仍然存在。由于量词是贪婪和占有欲的,如果找到,则不允许使用单字节。
请注意,大多数情况下,否定preg_match
函数更为简单,例如:
return (bool) !preg_match('~^(?:do|si|[a-gm0-9])*$~iD', $inputStr);
(或使用+
量词,如果您不想允许空字符串)