@sexy_man_1

Нужно сформировать регулярное выражение. С определенным количеством слов?

Вкратце.
Примерно есть такой шаблон, ещё не подогнан под регулярку:
Слово1 Слово2 %w{1,10} Слово9
Полный текст сообщения:
Слово1 Слово2 Слово3 - Слово4_ Сло-во5 -Сло!во6 Сло*во7 Сло/во8 Слово9

Где: %w{1,n} – ограниченная последовательность слов (состоящих из букв, цифр или спецсимволов описанных ниже), разделенных пробелом (или несколькими пробелами), где n – число слов (слов должно быть не менее 1 и не более чем n);

Мои попытки
$str = 'Слово1 Слово2 Слово3 - Слово4_ Сло-во5 -Сло!во6 Сло*во7 Сло/во8 Слово9';
preg_match('/^Слово1 Слово2 (\b[\S]+\b[\s]*){1,10} Слово9/u', $str) //Не дает результат, т.к.  -Сло!во6 изза дефиса перед словом не соответствует этой регулярке - \b[\S]+\b[\s]. Да и как отдельное слово дефис - также не окружается краями \b

Короче я целый день промучился, но так и не смог решить правильно написать регулярку
Пробовал и так ([^\s\w\d]*\b[\S]+\b[^\s\w\d]*)
и так /^Слово1 Слово2 (([\S]+[\s]+[\S]+){1,10}) Слово9$/u

В общем спасибо заранее и жду ваших комментариев.
P.S - Не забывать что в этой регулярке может быть и одно слово, и слово состоящее из одного символа/буквы

--------------------------------------------------------------

Если кому интересно, то нашел примерно такой вариант решения
/^Уважаемый клиент, такси ожидает вас\. ((([\s]+)|(^)|(?<=[\s]))(([^\s\w\d]*\b[\S]+\b[^\s\w\d]*)|([^\s\w\d]+))){1,10}\. С уважением такси такси\.$/u
  • Вопрос задан
  • 328 просмотров
Пригласить эксперта
Ответы на вопрос 3
@4iloveg
Full-Stack HTML Developer
Напиши нормально что ты хочешь получить. regex101.com дай ссылку сюда со списком слов.
Ответ написан
Комментировать
@sexy_man_1 Автор вопроса
Объясняю на примере. есть стандартные смс сообщения, идущие по шаблону. Например:
Уважаемый клиент, такси ожидает вас. Белый Nissan А123ББ. С уважением такси такси.

Т.к. Это типичное смс, и меняется в нем только данные об автомобиле, Я оператору (теле2/мегафон/мтс) передаю шаблон смс:
Уважаемый клиент, такси ожидает вас. %w{1,10}. С уважением такси такси.
Где за %w{1,10} - подставляются любые слова, в количестве от 1 до 10, в данном примере это информация об авто.

И мне необходимо теперь чтоб на моём сайте я мог определить, что отправляемое мной смс, подходит под этот шаблон, с помощью функции preg_match

Например я вот составил регулярное выражение - https://regex101.com/r/pWissd/1 - которое пока работает с таким текстом, но стоит добавить например к нисану дефис - Белый -Nissan А123ББ , либо чтоб отдельное слово был какой то символ, тот же дефис Белый Nissan - А123ББ - и данная регулярка перестает работать, и на своей стороне я банально не смогу определить к какому шаблону относится смс.
Ответ написан
Комментировать
@masterfreelance
программист со стажем
.*?
Уважаемый клиент, такси ожидает вас. %w{1,10}. С уважением такси такси.
У вас же здесь %w{1,10} теоретически может же быть что угодно. Что мешает использовать .*?
^Уважаемый клиент, такси ожидает вас\..*\. С уважением такси такси\.$
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы