Параметры регулярных выражений в Java String.matches () - PullRequest
3 голосов
/ 21 января 2012

Я хочу добавить опцию 'x' после моего регулярного выражения, чтобы игнорировать пробелы при использовании String.matches () в Java.Тем не менее, я вижу это на http://www.regular -expressions.info / java.html :

В классе Java String есть несколько методов, которые позволяют вам выполнять операции, используя обычныевыражение в этой строке в минимальном объеме кода.Недостатком является то, что вы не можете указать такие параметры, как «без учета регистра» или «точка соответствует новой строке».

У кого-нибудь есть простой способ обойти это с помощью Java, так что мне не нужно менятьмое регулярное выражение, чтобы разрешить ноль или более пробелов в каждом месте, где может быть пробел?

Ответы [ 3 ]

5 голосов
/ 21 января 2012

Простой способ - использовать класс Pattern вместо простого использования метода match ().

Например:

Pattern ptn = Pattern.compile("[a-z]+", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
Matcher mtcher = ptn.matcher(myStr)
....
1 голос
/ 21 января 2012

Я думаю, что сайт, на который вы ссылаетесь, неточный.Посмотрите на JavaDoc для многострочного флага (m) , флага (-ов) dot-all и флага комментариев (x) .

0 голосов
/ 29 апреля 2017

Используя класс Pattern, вы можете указать флаги опций в качестве второго параметра метода compile, на что указал Алвин:

Pattern.compile("[a-z]+", Pattern.CASE_INSENSITIVE).matcher("Hello").matches() // true

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

Встроенные выражения флага

Также возможно включить различные флаги, используя выражения встроенных флагов. Встроенные выражения флагов являются альтернативой версии компиляции с двумя аргументами и указываются в самом регулярном выражении.

Enter your regex: (?i)foo
Enter input string to search: FOOfooFoOfoO
I found the text "FOO" starting at index 0 and ending at index 3.
I found the text "foo" starting at index 3 and ending at index 6.
I found the text "FoO" starting at index 6 and ending at index 9.
I found the text "foO" starting at index 9 and ending at index 12.

Встроенные выражения флагов, которые соответствуют общедоступным полям Pattern, представлены в следующей таблице:

Constant                    Equivalent Embedded Flag Expression
Pattern.CANON_EQ            None
Pattern.CASE_INSENSITIVE    (?i)
Pattern.COMMENTS            (?x)
Pattern.MULTILINE           (?m)
Pattern.DOTALL              (?s)
Pattern.LITERAL             None
Pattern.UNICODE_CASE        (?u)
Pattern.UNIX_LINES          (?d)
...