2014-02-12 3 views
1

Мне нужно регулярное выражение, которое соответствует строке, которая равна , а не строка цифр. Учитывая мои ограниченные знания о регулярных выражениях, я предполагаю, что .* означает любое количество символов, которое соответствует следующим выражениям reg.android regex non-numbers only

Поэтому я думал, что это будет работать:

.*[\\D] 

Но, к сожалению, это не так. Вместо этого это работает:

.*[\\D].* 

Может ли кто-нибудь объяснить мне или хотя бы указать мне, где я могу это понять? Сайт java и большинство веб-сайтов, которые я нашел, недостаточно просты.

+0

http://regex101.com/r/dP5sC8 – PopoFibo

+0

возможно дубликат [Regex для чисел только] (HTTP : //stackoverflow.com/questions/273141/regex-for-numbers-only) – reto

ответ

0

Пункт «.» означает все, это может быть число или любой символ или символ. Звездочка '*' указывает количество, это означает, что оно может отображаться так, как оно хочет, от нуля до бесконечности. «\ D» означает не число.
Итак, в вашем первом регулярном выражении строка должна заканчиваться не числом.

123blablub -> match 
blablub123 -> no match 

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

123blablub -> match 
blablub123 -> match 
+0

спасибо за ваше объяснение! – user3300845

0

. соответствует любому персонажу.

* является квантором, который соответствует предыдущему токену любого количества раз, в то числе 0.

Поэтому .* соответствует любому количеству любых символов.

[] обозначает класс символов. Любой символ в классе разрешен. Например, [abc] соответствует a или b или c один раз.

\D - класс символов без цифр. (Вам нужно избегать \, так как он также является специальным символом в строковых литералах Java.) Вы можете комбинировать классы символов в классах символов, так что [\D] действительно, хотя его коротко написать как \D.

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

0

Это пытается сопоставить весь ваш вход по шаблону. Он вернется только в том случае, если все символы не являются цифрами.

Вы могли бы вместо того, чтобы использовать шаблон "(\ d +)" и вернуться! M.matches()