2011-01-24 3 views
6
strOutput.replace("/{{[^]*?}}/g",""); 

Есть ли способ преобразовать JavaScript-регулярные выражения в безопасные Java-регулярные выражения?Как преобразовать регулярное выражение javascript в безопасное java-regex?

Данное заявление дает мне ошибку:

Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\)

Я не все, что знаком с регулярным выражением, так что я мог бы использовать некоторые указания.

Спасибо!

+1

Можете ли вы опубликовать созданную Java, которая дала вам ошибку? –

ответ

11

Избавьтесь от косых черт. Вам не нужны те, что в Java. Кроме того, аромат Java regex не распознает такие переключатели, как /g и /i; они контролируются константами в java.util.regex.Pattern.

Единственные Javascript-переключатели, которые имеют смысл в мире Java: /i и /m. Эти карты относятся к Pattern.CASE_INSENSITIVE и Pattern.MULTILINE (вы можете использовать эти переключатели при создании регулярного выражения из класса Pattern, или вы можете использовать их inline - я покажу это позже).

/g не имеет ничего общего, но вы можете контролировать замещение поведения, используя String.replaceAll по сравнению с String.replaceFirst.

Чтобы получить код для работы, вы должны сделать что-то вроде этого:

strOutput.replaceAll("{{[^]*?}}", ""); 

Если вы хотите использовать переключатели, вам нужно сделать что-то добавить, как (?i) в начале регулярного выражения.

Вы не можете использовать String.replace, потому что он принимает CharSequence для первого аргумента, а не для регулярного выражения.

Также помните, что методы «быстрого повторного выражения», предлагаемые классом String, могут не работать так, как вы ожидаете. Это связано с тем, что когда вы указываете шаблон (скажем, abc) в качестве регулярного выражения для matches, например, фактический образец, видимый Java, - ^abc$. Таким образом, abc будет соответствовать, но bc не будет.

Дополнительная информация here.

0

Вам не понадобятся / (передние косые черты в начале и в конце), которые используются в javascript для встроенной декларации вместо кавычек.

Если просто Regex r = new Regex("{{[^]*?}}");

1

Избавьтесь от "/""/g" и в начале и в конце регулярного выражения. Затем вам нужно избежать каждого события "\", например: "\\".

Часть «g» означает глобальную. Это контролируется тем, как вы используете регулярное выражение в Java, а не в строке регулярного выражения.

Смежные вопросы