PHP Regex, чтобы найти, если строка отформатирована запятыми и точками с запятой

1

Мне нужно найти, если строка отформатирована следующим образом:

text1,x%;text2,y%

Итак, эти строки должны быть действительными:

example, 10%; test, 22%; another, 90%

another example, 11.5%; yet other example, 91%

another, 11%; other example, 11.2%

example2, 20%

И следующее должно быть недействительным:

example3; 10%, test3, 22%; another3, 90%

example4; 20%

example5, 11%; test 5, 123%

another fail example, 11,5%; yet other example, 91%

Я знаю некоторое регулярное выражение, но это подтверждение я даже не знаю, как начать.

EDIT: добавлено больше примеров.

  • 0
    Так что это anything, anything; - anything, anything; - anything, anything; ?
  • 0
    Кажется, у тебя конфликт. example2, 20% проходит, example4; 20% нет.
Показать ещё 3 комментария
Теги:
string

1 ответ

1
Лучший ответ

Вы можете использовать следующее регулярное выражение:

^[\w\s]+,\s*\d+(?:\.\d+)?%(?:;\s*[\p{L}\s]+,\s*\d+(?:\.\d+)?%)*$

См. Демонстрацию

Объяснение Regex:

В основном, он состоит из двух частей: один из них ; и остальные необязательные последовательности.

  • ^ - Начало строки
  • [\w\s]+ - 1 или более буквенно-цифровых или пробельных символов, за которыми следуют...
  • , - запятая, затем
  • \s* - необязательные пробелы
  • \d+(?:\.\d+)?% - число с плавающей точкой или целое число (десятичная часть является необязательной из-за ?) И знак процента
  • (?:;\s*[\p{L}\s]+,\s*\d+(?:\.\d+)?%)* - вторая часть, которая соответствует 0 или более последовательностям...
    • ;\s* - полуколона с последующим необязательным пробелом
    • [\p{L}\s]+ - 1 или более букв (\p{L}) или пробелов
    • ,\s* - запятая, а затем необязательные пробелы
    • \d+(?:\.\d+)?% - число с плавающей точкой или целое число (десятичная часть не обязательна) и знак процента
  • $ - Конец строки
  • 0
    Большое спасибо, но мне нужно извиниться, потому что я не включил достаточно примеров в мои вопросы, извините.
  • 1
    Я приведу только объяснение, если это регулярное выражение работает для вас - оно длинное, и я не уверен насчет [\p{L}\s]+ во второй части.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню