I need to have regular expression which find a character which not following by same character after it. Mean exclude double even multiple same character.
For exampl
UPDATE:
(?<!e)e(?!e)
Will match e not with negative lookbehind to prevent preceeding e and negative lookahead preventing following e.
Can be checked here
\b(([A-Za-z])(?!\2))+\b
Will match a word (sequence of one or more characters between A-Za-Z), with negative lookahead which prevents following character to be the same as last match, group 2, or using non capturing group.
/\b(?:([A-Za-z])(?!\1))+\b/g
however only
will match because it doesn't contain repeated character.
to match a word containing e but no ee
/(?<![a-z])(?=[a-z]*e)(?![a-z]*ee)[a-z]+/gi
/\b([a-df-z]*e[a-df-z]*)\b\s*/g
You could add the flag case insensitive /i
if needed.
Explanation:
/ : regex delimiter
\b : word boundary
( : start group 1
[a-df-z]* : 0 or more letter that is not "e"
e : 1 letter "e"
[a-df-z]* : 0 or more letter that is not "e"
) : end group 1
\b : word boundary
\s* : 0 or more spaces
/g : regex delimiter, global flag
As you didn't give which language you're using, here is a perl script:
my $str = "need only single characteeer";
my @list = $str =~ /\b([a-df-z]*e[a-df-z]*)\b\s*/g;
say Dumper\@list;
Output:
$VAR1 = [
'single'
];
And a php script:
$str = "need only single characteeer";
preg_match_all("/\b([a-df-z]*e[a-df-z]*)\b\s*/", $str, $match);
print_r($match);
Output:
Array
(
[0] => Array
(
[1] => single
)
[1] => Array
(
[1] => single
)
)