2013-11-08 5 views
0

Я хотел бы, чтобы соответствовать любые алфавитно-цифровые символы, которые могут быть разделены одним или несколькими точками:Как избежать множественных последовательных вхождений символа в регулярное выражение?

  1. Берти
  2. bert.123
  3. bert.01.03.27

но нет:

  1. .bert (точка не разделяющая)
  2. bert123. (Точка не отделяя)
  3. Берт ... 123 (несколько последовательных вхождений точки)

Теперь у меня есть этот ^[^\\.][\w\.]+?[^\\.]$, но до сих пор не может справиться с несколькими последовательных вхождений символа точки.

ответ

1

Что вы хотите ^\w++(\.\w++)*$

По крайней мере один алфавитно-цифровой символ, за которым следует произвольное число групп только одна точка с последующим, по меньшей мере, один алфавитно-цифровой символ.

+0

Это тоже работает! Благодаря ! – bertie

+0

Возможно, это не относится к вашим коротким примерным строкам, но мое решение немного более эффективно из-за того, что вместо него добавлена ​​дополнительная часть в конце, а не в начале. Вы можете получить его, подумав о том, что должен делать помощник, шаг за шагом. И притяжательные квантификаторы еще больше улучшают его. Но, как сказано, это относится к большим струнам и большому количеству из них. – Holger

+0

Спасибо за вашу разработку! Я попробовал ваше решение, и это сработало, но я не понимаю, что такое двойная плюс. Я понимаю, что один плюс будет соответствовать одному или нескольким случаям. – bertie

0

Я думаю, что это должно работать

boolean ok = !str.matches(".*[^0-9a-zA-Z.].*|\\..*|.*\\.|.*\\.{2,}.*") 
0

Попробуйте это (не уверен, если это то, что вы хотите ...):

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

Это должно работать:

^(\w+\.)*\w+$ 

Вы можете заменить \w на что-то более ограничительное, если хотите (например, [a-z])

+0

Я должен смотреть достаточно долго, чтобы, наконец, понять это. Большое спасибо ! – bertie

0
Pattern dotSeparated = Pattern.compile("^\\w+(\.\w+)*$"); 

При необходимости, замените \w на [A-Za-z0-9] или \\p{Alnum}, поскольку \w позволяет подчеркивает также.

Это соответствует одному или нескольким буквенно-цифровым символам, за которыми следует ноль или более [точка, за которой следует один или несколько буквенно-цифровых символов].

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