Есть ли способ объединить два слова с одним словом, имеющим «p», имеет начало, а другое имеет «p» в качестве конца, технически

#regex

#регулярное выражение

Вопрос:

Я задавался вопросом об этом долгое, долгое время.

Примечание: это бесполезно в любом случае, если кто-то не считает его полезным… Но мне просто интересно, можете ли вы написать это регулярное выражение странным сложным способом:

 /^(webp|p(?:ng|hotoshop))$/gm
 

Можете ли вы объединить два «p» для web’p и «p’ng / hotoshop?

Помните, что оно должно совпадать только:

 webp
png
photoshop
 

Я просто не смог найти ничего, связанного с этим, и я понятия не имею, что нужно Google, чтобы узнать об этом.

Насколько я понимаю, это должно быть невозможно в регулярных выражениях, если только это не произойдет, конечно, приведенное ниже не произойдет, если вы не будете возиться со своими шрифтами, на самом деле:
забавное регулярное выражение

Ответ №1:

В тех вариантах регулярных выражений, которые поддерживают условные конструкции регулярных выражений, вы можете использовать

 ^(web)?p(?(1)$|(?:ng|hotoshop))$
 

Смотрите Демонстрацию регулярных выражений.

Подробные сведения

  • ^ — начало строки
  • (web)? — Группа 1 (необязательно): — web строка, 1 или 0 раз
  • p — a p
  • (?(1)$|(?:ng|hotoshop)) — Если группа 1 совпадает, сопоставьте конец строки, иначе, сопоставьте ng или hotoshop
  • $ — конца строки.