Ваш regex3
выглядит почти нормально, но возможное совпадение будет иметь место с такими словами, как wow wow
или revivers
. Тогда, пожалуйста, попробуйте:
regex3='^(.)(.)(.)\w\3\2\1$'
Чтобы быть строгим, будет безопаснее заменить все точки на \w
, так как:
regex3='^(\w)(\w)(\w)\w\3\2\1$'
Само собой разумеется, что требуется привязка $
для regex1
и regex2
.
По состоянию на regex4
должно быть:
regex4='(\w)\1.*\1\1'
или
regex4='((\w)\2).*\1'
, чтобы соответствовать willfully
и riffraff
.
и regex5
должны быть:
regex5='(\w)\1.*(\w)\2.*(\w)\3'
, чтобы соответствовать bookkeeper
и keenness
.
Обратите внимание, что класс символов \w
эквивалентно [[:alnum:]]
. Если вы хотите ограничить соответствие только алфавитами, замените \w
на [[:alpha:]]
.
Кстати, вы также можете проверить, является ли переменная $str
палиндромом с:
[[ $str = $(rev <<< "$str") ]] && echo "$str is a palindrome"
как альтернатива.
Надеюсь, это поможет.