I want to accept only those strings having the pattern \'wild.flower\', \'pink.flower\',...i.e any word preceding \'.flower\', but the word should not contain dot. For example,
Here is the regex for you. ^([^\.]*)\.flower$
.
Example: https://regex101.com/r/cSL445/1.
Is this sufficient?
^\w+\.\w+$
You are looking for "^\w+\.flower$"
.
To match any character except a newline or a dot you could use a negated character class [^.\r\n]+
and repeat that one or more times and use anchors to assert the start ^
and the end $
of the line.
^[^.\r\n]+\.flower$
Or you could specify in a character class which characters you would allow to match followed by a dot \.
and flower
.
^[a-z0-9]+\.flower$
Your case of pink.blue.flower
is unclear. There are 2 possibilities:
blue
(cut off preceding dot and what was before)..flower
only if it is not preceded with a dot).In the first case accept other answers.
But if you want the second solution, use: \b(?<!\.)[a-z]+(?=\.flower)
.
Description:
\b
- Start from a word boundary (but it allows the "after a dot" case).(?<!\.)
- Negative lookbehind - exclude the "after a dot" case.[a-z]+
- Match a sequence of letters.(?=\.flower)
- Positive lookahead for .flower
.I assumed that you have only lower case letters, but if it is not the case,
then add i
(case insensitive) option.
Another remark: Other answers include \w
, which matches also digits and
_
or even [^\.]
- any char other than a dot (including e.g. \n
).
Are you happy with that? If you aren't, change to [a-z]
(again, maybe
with i
option).