要以任意顺序匹配 A、B 和 C,至少一次,你可以使用这个正则表达式:
/^(?=.*a)(?=.*b)(?=.*c)([a-c])+$/i
Demo
但是,我认为您可以在没有正则表达式的情况下实现这一点。创建一个函数,该函数将要检查的字符列表和字符串作为参数。对于每个字符,首先检查它是否包含在字符串中。如果不是,请返回false。如果它们都在那里,请将它们从字符串中删除。现在,如果字符串为空,则没有其他字符,因此可以返回true,否则返回false:
<?php
function checkCharacters($list, $string) {
foreach ($list as $letter) {
if (stripos($string, $letter) === false) {
return false;
}
$string = str_ireplace($letter, "", $string);
}
return empty($string);
}
$list = ["A", "B", "C"];
var_dump(checkCharacters($list, "ABC")).PHP_EOL; // true
var_dump(checkCharacters($list, "AABC")).PHP_EOL; // true
var_dump(checkCharacters($list, "ABBCC")).PHP_EOL; // true
var_dump(checkCharacters($list, "ABCD")).PHP_EOL; // false
var_dump(checkCharacters($list, "BAC")).PHP_EOL; // true
var_dump(checkCharacters($list, "ABACBCBACB")).PHP_EOL; // true
var_dump(checkCharacters($list, "AB")).PHP_EOL; // false
var_dump(checkCharacters($list, "AC")).PHP_EOL; // false
var_dump(checkCharacters($list, "A")).PHP_EOL; // false
var_dump(checkCharacters($list, "abc")).PHP_EOL; // true
这是为了以防万一,不区分大小写,因此它也接受a、b 和c。
Demo