Соответствие любому символу, кроме символа подчеркивания, с использованием Regex

Я пытаюсь написать регулярное выражение, которое будет соответствовать строке символов, ЗА ИСКЛЮЧЕНИЕМ строк с подчеркиванием.

У меня есть это до сих пор /[A-Za-z0-9]+/, но я не знаю, что включить в него, чтобы он не требовал подчеркивания.

ОБНОВИТЬ:

Это должно было быть более ясно с места в карьер. Я пытаюсь сопоставить адрес электронной почты, но не адреса электронной почты, которые имеют подчеркивание в части после _

Это то, что у меня есть в общей сложности на данный момент. /[A-Za-z_0-9]+@[A-Za-z0-9]+\.(com|ca|org|net)/ Ответы пока не работают


person CodyBugstein    schedule 04.03.2013    source источник
comment
^[^_]+$ означает любую строку без подчеркивания. например, этот комментарий или весь ваш вопрос. Это то, что вы хотите?   -  person Brigand    schedule 04.03.2013


Ответы (2)


Если я понимаю, о чем вы просите - сопоставление строк символов, за исключением строк символов, содержащих подчеркивание, - для этого требуется регулярное выражение.

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

^((?!_)[A-Za-z0-9])+$

?! — отрицательный опережающий оператор

РЕДАКТИРОВАТЬ:

Итак, вы хотите, чтобы в части перед знаком @ было не более одного подчеркивания, а в части после знака подчеркивания не было?

^[A-Za-z0-9]+_?[A-Za-z0-9]+@[A-Za-z0-9]+\.(com|ca|org|net)$

person Ryan O.    schedule 04.03.2013
comment
Как это гарантирует отсутствие подчеркивания после @? - person CodyBugstein; 04.03.2013
comment
Поскольку группа символов [A-Za-z0-9] не содержит символа подчеркивания, и, следовательно, символы подчеркивания не будут совпадать. Единственными допустимыми строками после знака @ являются один или несколько символов, за которыми следует точка, за которой следует один из (com|ca|org|net). - person Ryan O.; 04.03.2013
comment
Если вы еще этого не сделали, я рекомендую сайт, такой как Regex Pal, чтобы проверить ваши регулярные выражения на тестовых строках. - person Ryan O.; 04.03.2013

/^[^_]+$/ будет соответствовать строке из 1 или более символов, содержащей любой символ, кроме подчеркивания.

person rvalvik    schedule 04.03.2013