Сначала возникает вопрос, хорошая ли это идея или нет… (см. Различные статьи под заголовком «Ложь, которую программисты верят в XYZ»). Я не в Германии, а в соседней Австрии, и мой адрес не соответствует ни одному из ваших примеров. . (Есть два способа записать его, и ни один из них не соответствует ни одному из ваших.)
Помимо этого:
- Какие совпадения вы ожидаете, но не совпадают?
- Что не соответствует тому, что вы ожидаете?
- Какой диалект регулярных выражений вы используете?
Некоторые очевидные проблемы:
\d+(\s|-)?\w*$
^^^^^^^^^^
*
соответствует 0 экземплярам. Итак, вы разрешаете da sh или пробел, за которым не следует никаких символов. Наверное, не то, что вы хотели. Попробуйте:
\d+((\s|-)?\w+)?
Это сделает весь буквенный блок необязательным, но в нем всегда должна быть буква.
Кстати, буквы \w
не являются цифрами. Поэтому вам нужно явно разрешить их.
\d+
будет соответствовать 1 или более цифрам, а не «числу без префикса 0». Если ваш первый di git не должен быть равен нулю, вам нужно будет четко указать это: [1-9]\d*
.
У вас есть символ соответствия конца $
, но нет совпадения начала ^
. Вероятно, вам нужно либо ничего, либо оба, в зависимости от того, является ли ваша проверка регулярного выражения типом «совпадение» или «поиск». (то есть, если ваш вызов библиотеки регулярных выражений пытается проверить всю входную строку или соответствует ли какая-либо подстрока.)