RegEx, чтобы соответствовать String токенов в любом порядке? - PullRequest
3 голосов
/ 31 августа 2010

Я ищу регулярное выражение Oracle, которое будет соответствовать токенам в любом порядке.

Например, скажем, я ищу "один два".

Я бы хотел, чтобы оно совпадало с обоими, "один жетон два" "два других"

Количество токенов может возрасти больше, чем два, поэтому генерация перестановок для регулярного выражения была бы проблемой.

Есть ли более простой способ сделать это, чем этот

'(ONE.*TWO)|(TWO.*ONE)'

 i.e

select * 
from some_table t
where regexp_like(t.NAME_KEY, '(ONE.*TWO)|(TWO.*ONE)')

Ответы [ 2 ]

6 голосов
/ 01 сентября 2010

Вот альтернативный запрос, который использует функциональность полнотекстового поиска (FTS):

WHERE CONTAINS(t.name_key, 'ONE & TWO') > 0

См. Примеры прецедентов для объяснения оценки критериев .

Связанные:

1 голос
/ 31 августа 2010

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

SELECT * 
FROM some_table t
WHERE regexp_like(t.NAME_KEY, 'ONE')
AND regexp_like(t.NAME_KEY, 'TWO')

Одна проблема заключается в том, что это также будет соответствовать 'TWONE', что не совпадало бы с исходным регулярным выражением. Это может быть исправлено, если вы также проверите для некоторых разделительных токенов или границы слова.

Также регулярное выражение не обязательно для соответствия константной строке. Вместо этого вы можете просто использовать LIKE.

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