Я предполагаю, что вы являются совпадающие слова или части слов. Вы хотите, чтобы условия поиска, разделенные пробелами, ограничивали результаты поиска, и кажется, что вы намерены возвращать только те записи, которые содержат все слова, которые пользователь предоставляет. И вы намереваетесь подстановочный знак *
, чтобы стоять за 0 или более символов в соответствующем слове.
Например, если пользователь ищет в словах TERM1 term2, вы намерены возвращать только те элементы, которые имеют оба словаterm1
иterm2
.Если пользователь ищет слово термин *, он будет соответствовать любому слову, начинающемуся с term
.
Существуют подходящие регулярные выражения, которые эквивалентны этому языку поиска и могут быть сгенерированы из него.
Простой пример: слово term
, может быть указано в регулярном выражении путем преобразования в \bterm\b
. Но два или более слова, которые должны совпадать в любом порядке, требуют утверждений о взглядах. Используя расширенный синтаксис, что эквивалентно регулярное выражение:
(?= .* \b term1 \b)
(?= .* \b term2 \b)
Звездочка подстановочные можно утверждать, в регулярных выражениях с классом персонажа, затем звездочкой. Класс символов определяет, какие буквы вы считаете частью слова. Например, вы можете обнаружить, что [A-Za-z0-9]*
подходит для счета.
Короче говоря, вы могли бы быть удовлетворены, если преобразовать выражение, как:
foo ba* quux
к:
(?= .* \b foo \b)
(?= .* \b ba[A-Za-z0-9]* \b)
(?= .* \b quux \b)
То есть простой вопрос поиска и замены. Но не будьте осторожны, чтобы дезинфицировать строку ввода, чтобы избежать атак инъекционного пути удаления знаков препинания и т.д.
* Почему? * На самом деле это не то, что было предложено регулярным выражением, так почему вы пытаетесь перевернуть его в регулярное выражение? Просто выполните поиск по каждой из строк. – Amber
Почему 'ab * de' соответствует' abcd'? Где 'e'? Кроме того, если шаблон 'ad de' также действителен для данной фразы' ad hominem' (поскольку найдено 'ad')? В чем смысл астерики: должны ли быть сопоставлены все предшествующие символы без пробелов или только предыдущий символ? –
@Amber: Я просто думал, что чистое Regex будет быстрее. Я использую этот поиск для фильтрации результатов на лету для выпадающего списка. Так что это должно быть быстро. – Ranch