2012-04-13 1 views
1

У меня есть ниже мира кода:Java Regular Expression

 Pattern p = Pattern.compile("^\\d|^\\W|^\\s"); 
    Matcher m = p.matcher("stack overflow"); 

Может кто-нибудь объяснить выше шаблон регулярного выражения? Что оно делает ? Я должен сделать это, чтобы не допускать промежутков между существующими функциями .e.g. он не должен допускать «переполнение стека», поскольку он содержит пробелы.

EDIT

Ниже рисунка я попробовал работает нормально для меня. Спасибо всем за ваше предложение:

[a-zA-Z0-9_$#] 

ответ

8

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

Любая из этих трех альтернатив должна начинаться с начала темы, поскольку в каждом чередовании у вас есть ^.

На основании вашего описания, я думаю, что вы хотите, это выражение так:

^[\w#$]+$ 

Что будет соответствовать что-нибудь, содержащее один или несколько символов слова [A-Za-z0-9_], хэш # и доллар $. Символы Word не включают пробелы, поэтому это должно работать.

Я добавил якоря ^ и $, которые гарантируют, что он соответствует только всей строке (это то, что вы хотите?) Если вы просто хотите, чтобы соответствовать в начале, как в вашем примере, а затем удалить $.

Обратите внимание, что, как в вашем примере, вам нужно будет избежать \ в коде Java, как это:

Pattern p = Pattern.compile("^[\\w#$]+$"); 
+0

Так, как это сделать, не допускать однократного или множественного промежутка между ними. Нужно ли это делать отдельно? – Muse

+0

Нет, это должно работать так, как есть. одно или несколько пробелов не будут разрешены этим. Предложение @rodion использовать '\ S' также является хорошим, но даст аналогичные результаты. Я мог бы одобрить его, поскольку он более конкретен в отношении того, что (не) соответствует. – Robbie

+0

Можете ли вы предоставить дополнительную проверку на вышеуказанную проверку в оригинальной почте? Выражение, которое вы предложили, похоже, не работает для нескольких случаев. – Muse

4

Чтобы добавить другие ответы: Я думаю, что вы ищете шаблон, как "^\\S*$", который означает: сопоставить любое количество непространственных символов (\\S*) с начала (^) до конца ($).

+0

+1 за хорошую информацию о моем ответе – Robbie

+0

Можете ли вы предоставить дополнительную проверку вышеуказанной проверке в оригинальной почте? Выражение, которое вы предложили, похоже, не работает для нескольких случаев. – Muse

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

  • Нет связанных вопросов^_^