Intereting Posts
Возьмите значение на странице php, отправленной с помощью функции jquery OAuth – секрет потребителя в приложениях с открытым исходным кодом mysql_connect (): расширение mysql устарело и будет удалено в будущем: вместо этого используйте mysqli или PDO Вставить в базу данных после того, как пользователь имеет общий контент на facebook Неустранимая ошибка: класс 'CI_Model' не найден Использование Preg_Split с несколькими пространствами Получить xpath из результата поиска определенного шаблона регулярного выражения в кучке xml-файлов Функция масштабирования / изменения размера изображения с использованием библиотеки GD Атрибуты SimpleXML для массива Как поместить mysql внутри php-функции? Laravel 5.2 – Используйте строку в качестве настраиваемого основного ключа для ярко выраженной таблицы. 0 Laravel 5.4 Сброс пароля композитор laravel создать проект обновить часть веб-страницы в php Микроструктура (например, Flask или Sinatra) для PHP

Проблемы с регулярным выражением

Я пытаюсь получить регулярное выражение для работы, но я борется из-за моего отсутствия опыта с ними. Идея состоит в том, чтобы сканировать определенные строки, начинающиеся с «GB:»

Например, он должен обнаружить:

  • GB: AB12ABC
  • GB: AB34 ABC

Но нет:

  • США: AB12ABC
  • AB12ABC

У меня есть это регулярное выражение, которое соответствует строкам, которые я ищу (учитывает разные пространства, форматы и т. Д.):

/^([AZ]{3}\s?(\d{3}|\d{2}|d{1})\s?[AZ])|([AZ]\s?(\d{3}|\d{2}|\d{1})\s?[AZ]{3})|(([A-HK-PRSVWY][A-HJ-PR-Y])\s?([0][2-9]|[1-9][0-9])\s?[A-HJ-PR-Z]{3})$/

Но теперь я хочу добавить бит GB: бит на фронт. Что бы я изменил в приведенном выше выражении, чтобы сделать это?

Я бы добавил GB: после первого ^ , так как это то, что обозначает начало строки.

/ ^ ГБ:? (?? [AZ] {3} \ s (\ d {3} | \ д {2} | д {1}) \ s [AZ]) | ([AZ] \ S (\ д {3} | \ д {2} | \ д {1}) \ с [AZ] {3}) |? (([А-НК-PRSVWY] [А-HJ-PR-Y]) \ s ( [0] [2-9] |? [1-9] [0-9]) \ s [A-HJ-PR-Z] {3}) $ /

Изменить: да, я полагаю, есть. Право-о.

/^GB:([AZ]{3}\s?(\d{3}|\d{2}|d{1})\s?[AZ])|([AZ]\s?(\d{3}|\d{2}|\d{1})\s?[AZ]{3})|(([A-HK-PRSVWY][A-HJ-PR-Y])\s?([0][2-9]|[1-9][0-9])\s?[A-HJ-PR-Z]{3})$/

Просто сделайте свое регулярное выражение «начинающим с GB: а затем …»

Просто добавьте «GB:», кстати, вы можете уменьшить свое выражение: «(\ d {3} | \ d {2} | d {1})" просто "(\ d {1, 3})".

Начало этого заявления было бы следующим:

 ^GB:([AZ]{3}\s?(\d{3}|\d{2}|d{1})\s?[AZ])|([AZ]\s?(\d{3}|\d{2}|\d{1})\s?[AZ]{3})|(([A-HK-PRSVWY][A-HJ-PR-Y])\s?([0][2-9]|[1-9][0-9])\s?[A-HJ-PR-Z]{3})$ 

Вещь, которую следует помнить, – это утверждение, подобное [AZ]{3} ищет любые три заглавные буквы подряд, другими словами, поиск шаблона, а не точное соответствие, как вы хотели.

Если для GB: нет необходимости в поиске, вы можете сократить его до ^GB:.*$ .

Вы должны уметь придерживаться GB: на фронт, как все говорят, но в существующем регулярном выражении есть ошибка. Легче видеть в режиме свободного пробега:

 /^([AZ]{3} \s? \d{1,3} \s? [AZ]) | ([AZ] \s? \d{1,3} \s? [AZ]{3}) | ([A-HK-PRSVWY][A-HJ-PR-Y] \s? (?:0[2-9]|[1-9][0-9]) \s? [A-HJ-PR-Z]{3})$ /x 

Якорь ^ влияет только на первый вариант, а $ влияет только на третий. Вы должны добавить еще один слой сдерживания:

 /^ (?: ([AZ]{3} \s? \d{1,3} \s? [AZ]) | ([AZ]\s? \d{1,3} \s? [AZ]{3}) | ([A-HK-PRSVWY][A-HJ-PR-Y] \s? (?:0[2-9]|[1-9][0-9]) \s? [A-HJ-PR-Z]{3}) )$ /x 

… и теперь вы можете добавить префикс:

 /^ GB: (?: ([AZ]{3} \s? \d{1,3} \s? [AZ]) | ([AZ]\s? \d{1,3} \s? [AZ]{3}) | ([A-HK-PRSVWY][A-HJ-PR-Y] \s? (?:0[2-9]|[1-9][0-9]) \s? [A-HJ-PR-Z]{3}) )$ /x 

… или в режиме линейного шума:

 /^GB:(?:([AZ]{3}\s?\d{1,3}\s?[AZ])|([AZ]\s?\d{1,3}\s?[AZ]{3})|([A-HK-PRSVWY][A-HJ-PR-Y]\s?(?:0[2-9]|[1-9][0-9])\s?[A-HJ-PR-Z]{3}))$/