Подтвердить что ты не робот

Regex - разрешить пробел или ничего после матча

Привет, я почти новичок в этом Regex... так что, может быть, моя проблема легко, но я не могу найти решение!

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

foo()

Дело в том, что я НЕ хочу писать, если пользователь пишет что-то еще после этого, я имею в виду, если пользователь пишет только

"foo()" (or "foo() ")

тогда это хорошо, я хочу его нарисовать, но если пользователь пишет

"foo()d" 

Я не хочу писать, потому что теперь хорошо написано для меня.

Я уже написал шаблон регулярного выражения, который соответствует "foo()" (или также с точкой в ​​середине, например "foo.foo()" ), но я столкнулся с этой проблемой. Мне нужно добавить что-то в свой шаблон, который позволяет использовать только пробел или ничего (если пользователь пишет что-то еще после ")" Я не хочу его сопоставлять ". Это моя модель:

[a-z]*\.?[a-z]*\(("[^"\r\n]*"|[-]?\b\d+[\.]?\d*\b)?\)

Большое спасибо!

4b9b3361

Ответ 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 *: ноль или больше пробелов

% означает: конец строки