function isAssoc($arr)
{
$a = array_keys($arr);
for($i = 0, $t = count($a); $i < $t; $i++)
{
if($a[$i] != $i)
{
return false;
}
}
return true;
}
jack
и Один james
На всякий случай, два jack
или два james
не был бы позволен, только один jack
и один james
будут допустимы, мы можем, вероятно, разработать выражение, подобное:
^(?!.*\bjack\b.*\bjack\b)(?!.*\bjames\b.*\bjames\b)(?=.*\bjames\b)(?=.*\bjack\b).*$
Здесь, мы исключили бы те парные экземпляры использование, эти операторы:
(?!.*\bjack\b.*\bjack\b)
и,
(?!.*\bjames\b.*\bjames\b)
Мы можем также упростить это до,
^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjames\b|.*\bjack\b).*$
, Если Вы хотите упростить/изменить/исследовать выражение, это было объяснено на верхней правой панели [1 119] regex101.com . Если бы Вы хотели бы, можно также смотреть в [1 120] эта ссылка , как она соответствовала бы против некоторых демонстрационных исходных данных.
<час>jex.im визуализирует регулярные выражения:
const regex = /^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjames\b|.*\bjack\b).*$/gm;
const str = `hi jack here is james
hi james here is jack
hi james jack here is jack james
hi jack james here is james jack
hi jack jack here is jack james
hi james james here is james jack
hi jack jack jack here is james
`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
jack
и Один james
в определенном порядке Это может быть также разработано для первого james
последний jack
, подобный следующему:
^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjames\b.*\bjack\b).*$
и наоборот:
^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjack\b.*\bjames\b).*$
Vim имеет оператор \&
ответвления, который полезен при поиске строки, содержащей ряд слов в любом порядке. Кроме того, расширение набора необходимых слов тривиально.
, Например,
/.*jack\&.*james
будет соответствовать строке, содержащей jack
и james
, в любом порядке.
См. этот ответ для получения дополнительной информации об использовании. Я не знаю ни о какой другой regex разновидности, которая реализует ветвление; оператор даже не документируется на Регулярное выражение статья в Википедии.