Я використовую онлайн-налагоджувач regex Regexr (www.regexr.com), яка правильно визначає працюючу та непрацюючу Regex для мене здебільшого. Однак я застряг у двох конкретних регулярних виразах, які Regexr визначає як працюючі правильно, але вони не виграють у моїй роботі Перший, який я використовую, щоб знайти PGP-ключі, зокрема заголовок та колонтитул.
[-]{5}[A-Z]{3,5}sPGPsMESSAGE[-]{5}[^.]
і я використовую його для виявлення:
-----BEGIN PGP MESSAGE-----
і
-----END PGP MESSAGE-----
Мій інший регекс, який не виграв у реальній реалізації, полягає у визначенні номерів паспортів Великобританії:
b[0-9]{10}GB[RP][0-9]{7}[UMF]{1}[0-9]{9}b
приклади, які працюють у regexr:
7086493126GBR6510204M150224602
1234567890GBP1234567F123456712
Може хтось запропонує зрозуміти, чому це не спрацює?
Відповіді:
0 для відповіді № 1Я думаю, що ваша проблема є заключною частиною регулярного вираження: [^.]
Це буде відповідати будь-якому персонажу, який не єбуквальний період. Я не думаю, що це було вашим призначенням для цього, і це, безумовно, призведе до того, що регулярний вираз не сам по собі відповідає початковому та кінцевому повідомленням.
Просто, щоб було зрозуміло - поки .
як правило, метахарактер, всередині []
це просто буквальний характер.
Що стосується ідентифікаторів паспорта ГБ, я "повинен був би бачити рядок у більш контекстному контексті, але проблема майже виразно пов'язана зі метахарактеризами слова.
0 для відповіді № 2
Я завжди користуюся https://regex101.com/ перевірити мої регулярні вирази. Він точно пояснює, що робить ваш регулярний вираз, і повідомляє, чи відповідає ваш рядок.
Спробуй!
Якщо ви не можете визначити проблему з цим, регулярне вираження, ймовірно, не є проблемою.
Використовуючи regex101, я думаю, що це може працювати краще: ^[-]{5}[A-Z]{3,5}sPGPsMESSAGE[-]{5}$
Якщо ви читаєте опис на [^.]
в ньому йдеться "відповідати одному символу, якого немає в списку нижче. Буквальний символ" .
".