tags:

views:

66

answers:

4

I am trying to create a regex that does not match a word (a-z only) if the word has a : on the end but otherwise matches it. However, this word is in the middle of a larger regex and so I (don't think) you can use a negative lookbehind and the $ metacharacter.

I tried this negative lookahead instead:

([a-z]+)(?!:)

but this test case

example:

just matches to

exampl

instead of failing.

+2  A: 

If you are using a negative lookahead, you could put it at the beginning:

(?![a-z]*:)[a-z]+

i.e: "match at least one a-z char, except if the following chars are 0 to n 'a-z' followed by a ':'"

That would support a larger regex:

 X(?![a-z]*:)[a-z]+Y

would match in the following string:

 Xeee Xrrr:Y XzzzY XfffZ

only 'XyyyY'

VonC
Thanks, that works.
Callum Rogers
mark as answerd
Itay
A: 

Try this:

[a-z]\s
Zote
And what about a word that is followed by punctuation other than ":"?
Tim Pietzcker
Sorry my fault! I forgoted it.
Zote
A: 
([a-z]+\b)(?!:)

asserts a word boundary at the end of the match and thus will fail "exampl"

Tim Pietzcker
A: 

[a-z]+(?![:a-z])

theraccoonbear