gezequiel
gezequiel

Reputation: 353

Regex - only allow a space or nothing after a match

Hi I'm nearly new with this of Regex... so, maybe my problem it's easy but I can't find a solution!

I'm writing a regex pattern that looks into the user's writing and paint with another color the matches that is founded. I want for example to paint with another color, if the user write something like this:

foo()

the thing is that I DON'T want to paint that if the user writes something else after that, I mean if the user write only

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

then it's fine, I want to paint it, but if the user write

"foo()d" 

I don't want to paint that because is now well written for me.

I already wrote the regex pattern that match the "foo()" (or also with a dot in the middle, like "foo.foo()"), but I´m facing with that problem. I need to add something to my pattern that allow only a space, or nothing (if the user write something else after the ")" I don't want to match it.) This is my pattern:

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

Thank you very much!

Upvotes: 24

Views: 44733

Answers (5)

Scen
Scen

Reputation: 1720

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

Adding a [ ]? should do it. ? is used for 1 or 0, [ ] will only match space.

Also, [\s]? would work for all types of whitespace (tabs included).

Upvotes: 1

James Johnson
James Johnson

Reputation: 46067

This seems to do what you're looking for according to my regex tester:

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

If you want to allow for more than one space, use this:

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

Upvotes: 0

Ade Stringer
Ade Stringer

Reputation: 2681

David Brabant is close, but I think you actually want to try ending your regular expression with (?!\S) - this will mean you'll match anything not followed by a non-whitespace character. If you just want to match on spaces rather than whitespace, use (?![^ ]).

Upvotes: 22

stefano m
stefano m

Reputation: 4244

could you try to add:

\s*% ?

\s* : zero or more spaces

% means: end of string

Upvotes: 1

David Brabant
David Brabant

Reputation: 43589

Use negative look ahead:

(\w+)(\.*)(\(\))+(\s)*(?!.)

The important part for you in the regex above is: (\s)*(?!.)

(\s)* : followed by 0 or more white spaces (?!.) : and no other character

Upvotes: 6

Related Questions