Regex - разрешить пробел или ничего после матча
Привет, я почти новичок в этом Regex... так что, может быть, моя проблема легко, но я не могу найти решение!
Я пишу шаблон регулярного выражения, который смотрит на пользователя, пишущего и рисующего другим цветом совпадающие матчи.
Я хочу, например, рисовать другим цветом, если пользователь пишет что-то вроде этого:
foo()
Дело в том, что я НЕ хочу писать, если пользователь пишет что-то еще после этого, я имею в виду, если пользователь пишет только
"foo()" (or "foo() ")
тогда это хорошо, я хочу его нарисовать, но если пользователь пишет
"foo()d"
Я не хочу писать, потому что теперь хорошо написано для меня.
Я уже написал шаблон регулярного выражения, который соответствует "foo()" (или также с точкой в середине, например "foo.foo()" ), но я столкнулся с этой проблемой.
Мне нужно добавить что-то в свой шаблон, который позволяет использовать только пробел или ничего (если пользователь пишет что-то еще после ")" Я не хочу его сопоставлять ".
Это моя модель:
[a-z]*\.?[a-z]*\(("[^"\r\n]*"|[-]?\b\d+[\.]?\d*\b)?\)
Большое спасибо!
Ответы
Ответ 1
Дэвид Брабант близок, но я думаю, что на самом деле вы хотите попробовать закончить свое регулярное выражение с помощью (?!\S)
- это будет означать, что вы сравните все, за которым не следует символ без пробелов. Если вы просто хотите сопоставлять пробелы, а не пробелы, используйте (?![^ ])
.
Ответ 2
Используйте негативный взгляд вперед:
(\w+)(\.*)(\(\))+(\s)*(?!.)
Важная часть для регулярного выражения выше: (\ s) * (?!.)
(\ s) *: следуют 0 или более пробелов
(?!.): и никакой другой символ
Ответ 3
[a-z]*\.?[a-z]*\(("[^"\r\n]*"|[-]?\b\d+[\.]?\d*\b)?\)[ ]?
Добавление [ ]?
должен сделать это. ?
используется для 1
или 0
, [ ]
будет соответствовать только пробелу.
Кроме того, [\s]?
будет работать для всех типов пробелов (включая вкладки).
Ответ 4
Это похоже на то, что вы ищете в соответствии с моим тестером регулярного выражения:
[a-z]*\.?[a-z]*\(("[^"\r\n]*"|[-]?\b\d+[\.]?\d*\b)?\)([ ]?)(?!.)
Если вы хотите разрешить использование более одного места, используйте это:
[a-z]*\.?[a-z]*\(("[^"\r\n]*"|[-]?\b\d+[\.]?\d*\b)?\)([ ]*)(?!.)
Ответ 5
Вы могли бы попробовать добавить:
\ s *%?
\ s *: ноль или больше пробелов
% означает: конец строки