В данной строке разработайте шаблон, соответствующий любому вхождению буквы "b", где оно не должно следовать за буквой "a"

В заданной строке разработайте шаблон, соответствующий любому вхождению буквы "b", где оно не должно следовать за буквой "a".

Например:

abc или ab не должны совпадать, b ba, bb, cba должны совпадать.

Я попробовал следующее регулярное выражение:

**/(?!.*ab)(?=.*b)^(\w+)$/**

Все входы работают нормально:

abba 
dbcd 
bacdba 
bacd 
adfjldb 
dkfjb
abdfdsba

но где, как будто я даю ввод в одну строку, как:

ab ba abdkfjdk bacdk dkekfba

это не соответствует словам.

2 ответа

Решение

Ваше описание проблемы не соответствует вашим образцам. Вы говорите, что проблема в следующем:

В заданной строке разработайте шаблон, соответствующий любому вхождению буквы "b", где "b" не следует за буквой "a".

И это было бы просто

 [^a](b)

Смотрите здесь, нужные совпадения выделены зеленым цветом.

Все же ваши образцы подразумевают другую проблему. Они подразумевают, что правильное описание проблемы должно быть:

В заданной строке разработайте шаблон, соответствующий любому слову, содержащему букву "b", если только "b" не следует за буквой "a".

И это будет

 \w*ab\w*|(\w*b\w*)

Смотрите здесь, нужные совпадения выделены зеленым цветом.

Если вы хотите сопоставить любое вхождение буквы "b", которое не следует после "a". то есть, "b" не должно быть после "a", но "a" может быть после "b", вы можете использовать это регулярное выражение, которое использует отрицательный вид сзади:

(?<!a)b

объяснение

  • Отрицательный взгляд позади (?<!
  • Который утверждает, что то, что позади, не a
  • Закрыть негативный взгляд за спиной )
  • Матч b
Другие вопросы по тегам