Статьи

Так ты хочешь выучить регулярные выражения? — часть 6

Добро пожаловать, так что вы хотите изучать регулярные выражения? Часть 6. Хорошо, я знаю, что сказал, что часть 5 будет последней частью в серии, но я просто должен был разобраться с этим и хотел поделиться. Помните, если вы хотите больше уроков по регулярным выражениям, особенно более продвинутых, чем у Микки Мауса, перейдите на ошибку Бен . Он знает об этом больше, чем я, и я слышал, что у него есть блог …

В нашем последнем упражнении мы рассмотрели очистку некоторых скриптов данных.

В этом упражнении мы собираемся переформатировать файл конфигурации из стиля .ini в стиль ColdSpring MapFactory. В частности, я интегрирую CFFormProtect в приложение и хочу, чтобы конфигурация управлялась в ColdSpring с остальными моими конфигурациями. Конечно, я мог бы шататься с копией + вставкой, разбивая ключи, сжигая сухожилия, но это кажется юным программистом, не так ли?

 

Предположим, этот набор объявлений:

mouseMovement=1
usedKeyboard=1
timedFormSubmission=1
hiddenFormField=1
akismet=0
tooManyUrls=1
teststrings=1
projectHoneyPot=0
timedFormMinSeconds=5
timedFormMaxSeconds=3600
encryptionKey=JacobMuns0n
akismetAPIKey=
akismetBlogURL=
akismetFormNameField=
akismetFormEmailField=
akismetFormURLField=
akismetFormBodyField=
tooManyUrlsMaxUrls=6

Мы хотим превратить: mouseMovement = 1 в: <entry key = «mouseMovement»> <value> 1 </ value> </ entry>

Обратите внимание, что мы разбили строку, разделенную знаком равенства, на несколько узлов XML.

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

В Eclipse выполните следующее:

  1. Откройте новый файл и вставьте вышеуказанный набор объявлений: (да, все)
  2. Откройте диалог поиска (я использую CTRL + F) и убедитесь, что включена опция Регулярное выражение
  3. Введите в поле « Найти» следующее: Ввод (. * [^ =]) = (. *)
  4. Введите в поле « Заменить» следующее: Введите <entry key = «$ 1»> <value> $ 2 </ value> </ entry>
  5. Нажмите Find и убедитесь, что шаблон соответствует тому, что мы хотим
  6. Наконец, нажмите Заменить все

Вы должны иметь это:

<entry key="mouseMovement"><value>1</value></entry>
<entry key="usedKeyboard"><value>1</value></entry>
<entry key="timedFormSubmission"><value>1</value></entry>
<entry key="hiddenFormField"><value>1</value></entry>
<entry key="akismet"><value>0</value></entry>
<entry key="tooManyUrls"><value>1</value></entry>
<entry key="teststrings"><value>1</value></entry>
<entry key="projectHoneyPot"><value>0</value></entry>
<entry key="timedFormMinSeconds"><value>5</value></entry>
<entry key="timedFormMaxSeconds"><value>3600</value></entry>
<entry key="encryptionKey"><value>JacobMuns0n</value></entry>
<entry key="akismetAPIKey"><value></value></entry>
<entry key="akismetBlogURL"><value></value></entry>
<entry key="akismetFormNameField"><value></value></entry>
<entry key="akismetFormEmailField"><value></value></entry>
<entry key="akismetFormURLField"><value></value></entry>
<entry key="akismetFormBodyField"><value></value></entry>
<entry key="tooManyUrlsMaxUrls"><value>6</value></entry>

(если нет, вы пропустили шаг. Посмотрите на изображение и сравните с тем, что есть в диалоговом окне «Найти / заменить». Убедитесь, что в выражении поиска нет лишних пробелов)

Blamo! Данные конфигурации были изменены с формата * ini на формат ColdSpring XML. Посмотрите, сколько денег вы сэкономили от необходимости замораживать запястья. Давайте расшифруем код, не так ли?

Вот часть поиска регулярного выражения: (. * [^ =]) = (. *)

  • ()   Первый символьный блок окружен круглыми скобками. Это означает, что мы будем определять назначаемую группу.
  • . * [^ =]   Внутри первого набора скобок . * Означает все символы, затем следует [^ =], что исключает знак равенства. Итак, (. * [^ =]) Означает, что начиная с начала, дайте мне назначаемую группу всех символов, пока вы не нажмете знак равенства.
  • =   Далее у нас есть знак равенства, потому что это граница, обозначающая вторую группу для определения.
  • (. *)   Следующим является чанк, заключенный в круглые скобки. Это означает, что мы будем определять другую назначаемую группу
  • . *   Во втором наборе скобок . * Означает все символы. Поскольку больше ничего нет, мы хотим, чтобы все до конца строки.

Все это определяет границы для символа, идущего по регулярному выражению gnome, который начинается в начале каждой строки, захватывает первую группу символов перед знаком равенства и вторую группу символов после знака равенства и присваивают им имена $ 1 и $ 2 для нас.

Затем в разделе «Замена» мы использовали: <entry key = «$ 1»> <value> $ 2 </ value> </ entry>

  • Это просто структурированный xml с номерами групп в нужных местах.

 

Таким образом, на простом английском языке мы попросили регулярное выражение найти / заменить gnome следующим образом: Разбить каждую строку на группы, в которых есть знак до и после, а затем поместить содержимое каждой группы в литерал XML.

Я уверен, что вы можете согласиться, что это было намного проще, чем феерия копирования / вставки … Надеюсь, вам понравилась эта (расширенная) серия блогов на Regex. Если ты хочешь больше таких, иди к черту Бен Надель … Его мозг — это полоса интересных шаблонов регулярных выражений …

С http://www.nodans.com