Java СОДЕРЖИТ использование MATCHES - PullRequest
0 голосов
/ 16 марта 2012

Мне нужен простой способ реализовать функцию CONTAINS с помощью MATCHES . Я считаю, что это моя отправная точка:

xxx.matches("'.*yyy.*'");

Но мне нужно сделать его универсальным методом и предварительно обработать все, что я ИЩУ, чтобы быть принятым на матчах! Это должно быть сделано с использованием только символа ESCAPE '\'!

Представьте себе строку SEARCH FOR, которая может содержать некоторые специальные символы, которые должны быть "экранированы регулярным выражением" ...

String SEARCH_FOR="*.\\"
xxx.matches("'.*" + SEARCH_FOR + ".*'");

Есть ли уловы? Особые ситуации? Любые другие "специальные символы должны быть приняты во внимание?

Спасибо

1 Ответ

4 голосов
/ 16 марта 2012

Вы ищете Pattern.quote (String) ?

Это позволяет избежать специальных символов для вас.

-edit-

После прочтения комментариев, я очень надеюсь, что вы попробуете Pattern.quote (yourString.toLowerCase ()), так как похоже, что вы использовали Pattern.quote (yourString) .toLowerCase (). Если DataNucleus применяет регулярное выражение, то не должно быть проблем с использованием escape-последовательности \ Q и \ E.

Поскольку вы действительно просили об этом, ".\\".replaceAll("(\\.|\\$|\\+|\\*|\\\\)", "\\\\\$1") выводит \.\\ Это ускользнет от., $, +, * И *. Обратите внимание, что безопасность этого теперь все на вас. Если вы не уклоняетесь от чего-то, что вам нужно, или вы избегаете этого неправильно, вы либо позволите людям использовать регулярные выражения в поисковом запросе, когда вы этого не ожидали, либо он не даст результатов, которые вы ожидали.

...