Регулярное выражение для соответствия всем условиям поиска - PullRequest
1 голос
/ 17 мая 2011

Мне нужно регулярное выражение, которое будет соответствовать всем терминам в наборе поисковых терминов. Если пользователь вводит «bat sun», тогда мне нужно сопоставить любые текстовые записи, в которых есть слова, начинающиеся с «bat» И начинающиеся с «sun». Таким образом, «Sunday Batman» и «Batmobile sundance» должны совпадать, но «Sunday» или «Batman» не будут совпадать, поскольку не все условия поиска совпадают.

Я использую выражение в MongoDB (официальный драйвер C #) для поддержки поиска.

Спасибо!

Ответы [ 3 ]

1 голос
/ 17 мая 2011

В зависимости от вашего определения слова, вы можете избежать использования \b, чтобы соответствовать началу слова.

Что касается проверки двух результатов, гораздо проще сделать это с помощью двух совпадений.

/\bsun/i && /\bbat/i          # Engines without implicit anchoring
/.*\bsun.*/i && /.*\bbat.*/i  # Engines with implicit anchoring

Это может быть сделано, если ваш движок регулярных выражений поддерживает просмотр нулевой ширины.

/^(?=.*\bsun)(?=.*\bbat)/si   # Engines without implicit anchoring
/^(?=.*\bsun).*\bbat/si       # Engines without implicit anchoring
/(?=.*\bsun)(?=.*\bbat).*/si  # Engines with implicit anchoring
0 голосов
/ 17 мая 2011

Я думаю, что вы можете сделать что-то вроде:

.find( { Item: { $regex : /\b[Term1]/i, $regex : /\b[Term2]/i, $regex : /\b[TermN]/i } } );

См .: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-RegularExpressions

0 голосов
/ 17 мая 2011

Возможно регулярное выражение, как показано ниже, если вы действительно хотите использовать регулярное выражение:

(?=.*\bsun)(?=.*\bbat).*

Конечно, вы хотите, чтобы он игнорировал регистр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...