Я новичок в регулярном выражении, в основном я хотел бы проверить, есть ли в слове ТОЛЬКО одно двоеточие или нет.
Если есть два или более двоеточия, он ничего не вернет. если есть одно двоеточие, верните как есть. (двоеточие должно быть в середине строки, а не в конце или начале.
(1)
a:bc:de #return nothing or error.
a:bc #return a:bc
a.b_c-12/:a.b_c-12/ #return a.b_c-12/:a.b_c-12/
(2)
Я так думаю, но это кажется слишком сложным.
^[^:]*(\:[^:]*){1}$
^[-\w./]*:[-\w/.]* #this will not throw error when there are 2 colons.
Любые направления будут полезны, спасибо!
На каком языке/среде вы будете реализовывать искомое решение?
@jasonharper Пожалуйста, не нарушайте намеренно простой дизайн страницы этого сайта вопросов и ответов, публикуя советы по решению проблемы в качестве комментария к вопросу.
Я увидел в этом хорошую возможность освежить свои навыки регулярных выражений - так что это может быть не оптимально, но короче вашего последнего решения.
Это шаблон регулярного выражения: /^[^:]*:{1}[^:]*$/gm
и это строки, которые я тестирую: 'oneco:on'
(совпадение) и 'one:co:on'
, 'oneco:on:'
, ':oneco:on'
(все они не должны совпадать)
Чтобы объяснить, что происходит, ^
соответствует началу строки, а $
соответствует концу строки.
Бит [^:]
говорит, что любой символ, который является нет двоеточием, будет совпадать.
Таким образом, ^[^:]
означает, что первый символ строки может быть любым кроме для двоеточия, *:{1}
означает, что любое количество символов может идти после двоеточия Один (отсюда и 1
). Наконец, [^:]*$
означает, что любое количество (*
) символов может следовать за двоеточием, если Oни не является двоеточием.
Чтобы уточнить, это потому, что мы указываем шаблон для поиска в начале и конце строки, окружая одиночное двоеточие, которое мы ищем, только первая строка 'oneco:on'
является совпадением.
Просто двоеточие :
будет работать точно так же, как :{1}
!
Это найдет такие «слова» в большом предложении:
(?<= |^)[^ :]+:[^ :]+(?= |$)
См. живая демонстрация.
Если вы просто хотите проверить весь ввод:
^[^ :]+:[^ :]+$
Чтобы ограничиться только буквенно-цифровыми символами, подчеркиванием, тире, точками и косой чертой:
^[\w./-]+:[\w./-]+$
Спасибо! ^[^ :]+:[^ :]+$ это работает. Но что, если я хочу, чтобы повторялись только цифры, буквы, тире, подчеркивание, точка, а не другие символы. Думаю, это сработает ^[^:][-\w._]*+:[^:]+$
@Xiaolong см. отредактированный ответ. Примечание: \w
включает подчеркивание. В вашем примере были косые черты, поэтому я их тоже добавил.
Должно быть просто
^[^:]+:[^:]+$
- что угодно, кроме двоеточия (повторяется), двоеточие, что угодно, кроме двоеточия (повторяется), закрепленное на обоих концах.