Добро пожаловать, так что вы хотите изучать регулярные выражения? Часть 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 выполните следующее:
- Откройте новый файл и вставьте вышеуказанный набор объявлений: (да, все)
- Откройте диалог поиска (я использую CTRL + F) и убедитесь, что включена опция Регулярное выражение
- Введите в поле « Найти» следующее: Ввод (. * [^ =]) = (. *)
- Введите в поле « Заменить» следующее: Введите <entry key = «$ 1»> <value> $ 2 </ value> </ entry>
- Нажмите Find и убедитесь, что шаблон соответствует тому, что мы хотим
- Наконец, нажмите Заменить все
Вы должны иметь это:
<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. Если ты хочешь больше таких, иди к черту Бен Надель … Его мозг — это полоса интересных шаблонов регулярных выражений …