PHP регулярное выражение: каждое слово должно заканчиваться точкой

Может кто-нибудь помочь мне, как конкретный шаблон для preg_match функционировать?

  • Каждое слово в строке должно заканчиваться точкой
  • Первый символ строки должен быть [a-zA-Z]
  • После каждой точки может быть пробел
  • Там не может быть два пробела рядом друг с другом
  • Последний символ должен быть точкой (логично после слова)

Примеры:

  • «Ing» -> ложь
  • «Ing.» -> правда
  • «.Ing.» -> ложь
  • «Хх гг» -> ложь
  • «XX. YY.» -> правда
  • «XX.YY.» -> правда

Можете ли вы помочь мне, пожалуйста, как проверить строку? Мой шаблон

/^(([a-zA-Z]+)(?! ) \.)+\.$/

Я знаю, что это неправильно, но я не могу понять это. Спасибо

2

Решение

Проверьте, как это соответствует вашим потребностям.

/^(?:[A-Z]+\. ?)+$/i
  • ^ начало матчей
  • (?: открывает группа без захвата для повторения
  • [A-Z]+ с i флаг соответствует одному или нескольким альфа & верхний)
  • \. ? соответствует буквальной точке, за которой следует необязательный пробел
  • )+ все это один раз или больше, пока $ конец

Вот демоверсия на regex101

Если вы хотите запретить пробел в конце, добавьте минус смотретьпозади: /^(?:[A-Z]+\. ?)+$(?<! )/i

2

Другие решения

Попробуй это:

$string = "Ing
Ing.
.Ing.
Xx Yy.
XX. YY.
XX.YY.";

if (preg_match('/^([A-Za-z]{1,}\.[ ]{0,})*/m', $string)) {
// Successful match
} else {
// Match attempt failed
}

Результат:

введите описание изображения здесь

Regex подробно:

^               Assert position at the beginning of a line (at beginning of the string or after a line break character)
(               Match the regular expression below and capture its match into backreference number 1
[A-Za-z]        Match a single character present in the list below
A character in the range between “A” and “Z”
A character in the range between “a” and “z”
{1,}            Between one and unlimited times, as many times as possible, giving back as needed (greedy)
\.              Match the character “.” literally
[ ]             Match the character “ ”
{0,}            Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
)*              Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
0

По вопросам рекламы [email protected]