Образцы регулярного выражения для Номеров для отслеживания

Я нашел отчет об ошибке очень похожего случая ( JDK-8143380 ), который был закрыт как «Не проблема» Стюарта Маркса:

Это тупик инициализации класса. Основной поток тестовой программы выполняет статический инициализатор класса, который устанавливает флаг для выполнения инициализации для класса; этот флаг остается установленным до завершения статического инициализатора. Статический инициализатор выполняет параллельный поток, который заставляет лямбда-выражения оцениваться в других потоках. Эти потоки блокируют ожидание завершения класса для инициализации. Однако основной поток блокируется, ожидая завершения параллельных задач, что приводит к тупиковой ситуации.

Тестовая программа должна быть изменена для перемещения логики параллельного потока вне статического инициализатора класса. Закрытие как не проблема.

blockquote>

Я смог найти еще один отчет об ошибке ( JDK-8136753 ), также закрытый как «Не проблема» Стюарта Маркса:

Это тупик, который возникает из-за того, что статический инициализатор Fruit enum плохо взаимодействует с инициализацией класса.

См. Спецификацию языка Java, раздел 12.4.2 для получения подробных сведений о классе инициализация.

http://docs.oracle.com/javase/specs/jls/se8/html/jls-12.html#jls-12.4.2

Вкратце, что происходит:

  1. Основной поток ссылается на класс Fruit и запускает процесс инициализации. Это устанавливает флаг инициализации в прогресс и запускает статический инициализатор в основном потоке.
  2. Статический инициализатор запускает некоторый код в другом потоке и ждет его завершения. В этом примере используются параллельные потоки, но это не имеет ничего общего с потоками.
  3. Код в другом потоке ссылается на класс Fruit, который проверяет флаг инициализации в процессе выполнения. Это заставляет другой поток блокироваться до тех пор, пока флаг не будет очищен. (См. Шаг 2 в JLS 12.4.2.)
  4. Основной поток заблокирован, ожидая завершения другого потока, поэтому статический инициализатор никогда не завершается. Поскольку флаг инициализации в процессе не очищается до тех пор, пока не завершится статический инициализатор, потоки зашли в тупик.

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

Закрытие как не проблема.

blockquote>

Обратите внимание, что FindBugs имеет открытую проблему для добавления предупреждения для этой ситуации.

56
задан Chad Birch 3 April 2009 в 21:56
поделиться

7 ответов

Можно попробовать их (не гарантируемый):

UPS:

\b(1Z ?[0-9A-Z]{3} ?[0-9A-Z]{3} ?[0-9A-Z]{2} ?[0-9A-Z]{4} ?[0-9A-Z]{3} ?[0-9A-Z]|[\dT]\d\d\d ?\d\d\d\d ?\d\d\d)\b

UPS:

\b(1Z ?\d\d\d ?\d\w\w ?\d\d ?\d\d\d\d ?\d\d\d ?\d|[\dT]\d\d\d ?\d\d\d\d ?\d\d\d)\b

USPost:

\b(\d\d\d\d ?\d\d\d\d ?\d\d\d\d ?\d\d\d\d ?\d\d\d\d ?\d\d|\d\d\d\d ?\d\d\d\d ?\d\d\d\d ?\d\d\d\d ?\d\d\d\d)\b

, Но протестируйте перед использованием их. Я рекомендую RegexBuddy.

2
ответ дан David Pokluda 7 November 2019 в 16:51
поделиться

Мне нужно подтвердить ТОЛЬКО США Почтовые службы (USPS) отслеживая номера. В WikiAnswers говорится, что мои числовые форматы следующие:

USPS предлагает отслеживание только с помощью Express mail, обычно начинается с буквы "E", еще одна буква, за которой следуют 9 цифр, и еще две буквы. USPS действительно имеет «Наклейки с номерами» для других услуг от 16 до 22 цифр длинный.

http://wiki.answers.com/Q/How_many_numbers_in_a_USPS_tracking_number

Я добавляю, что номера на этикетках начинаются с «9», так как все те, которые я получил от личных отправлений за последние 2 года, начинаются с а 9.

Итак, если предположить, что WikiAnswers верен, вот мое регулярное выражение, которое соответствует обоим:

/^E\D{1}\d{9}\D{2}$|^9\d{15,21}$/

Это довольно просто. Вот разбивка:

^E       - Begins w/ E  (For express number)
\D{1}    - followed by another letter
\d{9}    - followed by 9 numbers
\D{2}    - followed by 2 more letters
$        - End of string

|        - OR

^9       - Basic Track & Ship Number
\d{15,21}   - followed by 15 to 21 numbers
$        - End of string

Используя тестер регулярных выражений www.gummydev.com, этот шаблон соответствует обеим моим тестовым строкам:

ЭКСПРЕСС-ПОЧТА: EK225651436US

НОМЕР ЭТИКЕТКИ: 9410803699300003725216

** Примечание. При использовании ColdFusion (я) удалите первый и последний "/" из шаблона

3
ответ дан 26 November 2019 в 17:30
поделиться

Если это поможет кому-то другому, ищущему это, вот простой класс Python, который разрешает распространенные форматы: Gist # 541851

2
ответ дан 26 November 2019 в 17:30
поделиться

Я нажал на Royal Mail для регулярного выражения для ссылок отслеживания Записанная и Специальная доставка, но далеко не продвинулся. Даже полный набор правил, по которым я мог катать собственные, был им не по силам.

По сути, даже после того, как у них ушло около недели и они вернулись с различными комбинациями букв, обозначающими тип услуги, я смог привести примеры из нашего опыта, которые показали, что были дополнительные комбинации, которые были явно действительными, но не были задокументированы. .

Ссылки следуют явно стандартному международному формату, который, я думаю, описал бы регулярное выражение Джефа / ^ [A-Za-z] {2} [0-9] + GB $ / :

XX123456789GB

Несмотря на то, что это кажется стандартным форматом, т.е. большая часть международной почты имеет тот же формат, где последние две буквы обозначают страну отправления, мне не удалось узнать больше об этом «стандарте» или о том, где он исходит из (любые разъяснения приветствуются!).

Особенностью Royal Mail является использование первых двух букв для обозначения уровня обслуживания. Мне удалось составить список префиксов, обозначающих специальную доставку, но я не уверен, что он завершен на 100%:

AD AE AF AJ AK AR AZ BP CX DS EP HC HP KC KG
KH KI KJ KQ KU KV KW KY KZ PW SA SC SG SH SI
SJ SL SP SQ SU SW SY SZ TX WA WH XQ WZ

Без одного из этих префиксов услуга - это Записанная доставка, которая дает подтверждение доставки, но не отслеживает.

Обычно кажется, что включение S, X или Z обозначает более высокий уровень обслуживания, и я не думаю, что когда-либо видел нормальный элемент Записанная доставка с какой-либо из этих букв в префиксе.

Однако, как вы можете видеть, есть много префиксов, которые необходимо будет протестировать, если уровень обслуживания будет проверяться с помощью регулярного выражения, и с учетом того факта, что Royal Mail, похоже, неспособна предоставить исчерпывающий набор правил, а затем пытается проверить качество обслуживания. уровень может быть бесполезным.

5
ответ дан 26 November 2019 в 17:30
поделиться

Я использую их в приложении eBay Я написал:

Внутренний USPS:

/^91[0-9]+$/

Международный USPS:

/^[A-Za-z]{2}[0-9]+US$/

FedEx:

/^[0-9]{15}$/

Однако это может быть специфично для eBay / Paypal, поскольку все внутренние ярлыки USPS начинаются с «91». Все ярлыки USPS International начинаются с двух символов и заканчиваются «US». Насколько мне известно, FedEx использует всего 15 случайных цифр.

(Обратите внимание, что эти регулярные выражения предполагают, что все пробелы удалены. Хотя было бы довольно легко разрешить пробелы)

1
ответ дан 26 November 2019 в 17:30
поделиться

Я считаю, что FedEx состоит из 12 цифр:

^[0-9]{12}$
0
ответ дан 26 November 2019 в 17:30
поделиться

Я также недавно наткнулся на номера для отслеживания от FedEx с 22 цифрами, так что будьте осторожны! Я пока не нашел подходящей ссылки на общий формат FedEx.

FedEx, пример №: 9612019059803563050071

0
ответ дан 26 November 2019 в 17:30
поделиться
Другие вопросы по тегам:

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