Я выполняю разбиение в javascript с /\s+(AND|OR)(?=\s+")\s+/
на
"email" IS NOT NULL AND "email" LIKE '%gmail.com' OR "email" = 'test@test.com'
Теперь мое понимание регулярных выражений заставит меня ожидать получения следующего массива:
[0]: "email" IS NOT NULL
[1]: "email" LIKE '%gmail.com'
[2]: "email" = 'test@test.com'
Примечание: я избавился от разделителей для ясности.
Однако я получаю
[0]: "email" IS NOT NULL
[1]: AND
[2]: "email" LIKE '%gmail.com'
[3]: OR
[4]: "email" = 'test@test.com'
при работе на Firefox 3.6.8, Chrome 5.0.375.126 и Safari 5.0.1 на OS X10.6.4.
Однако, когда я попробовал обновленную версию IE8 8.0.6 с настройками по умолчанию, я получил то, что ожидал вначале.PHP 5.2.10 с preg_split
также разделяет его таким образом.
Я предполагаю, что на этот раз «хорошие» браузеры ошиблись, но мне хотелось бы больше мнений.
Редактировать: Пример, который я привел здесь с электронными письмами, является наивным примером.По сути, я не знаю, кем может быть каждый участник."xyz" = '1' AND "zyx" = 'test AND toast'
- еще одна возможная входная строка.
Что мне известно о структуре, так это то, что вся строка будет иметь следующий шаблон:
"<attribute>" <operator> '<value>'( (AND|OR) "<attribute>" <operator> '<value>')*
Примечание: пробелы фактически представляют \s+