2010-03-26 3 views
0

Я преобразовываю XML-данные в параметры элемента и имею грязный скрипт regex, который я использовал в Textmate. Я знаю, что точка (.) Не ищет новые строки, так вот как я ее разрешил.Что такое лучший способ написать это регулярное выражение?

Поиск

language="(.*)" 
(.*)<education>(.*)(\n)?(.*)?(\n)?(.*)?(\n)?(.*)?</education> 
(.*)<years>(.*)</years> 
(.*)<grade>(.*)</grade> 

Заменить

grade="$13" language="$1" years="$11"> 
     <education>$3$4$5$6$7$8$9</education> 

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

+0

DUP из http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained- теги. – bmargulies

+0

Это помогло бы, если бы вы могли показать фрагмент XML, который у вас есть, и XML, который вы хотите. Мне трудно понять, что вы пытаетесь сделать. – John

+0

Как написать «(. *) (\ N)? (. *)? (\ N)? (. *)? (\ N)? (. *)?" и «$ 3 $ 4 $ 5 $ 6 $ 7 $ 8 $ 9" таким образом, что мне не нужно дублировать себя для каждой новой строки и возвращенной стоимости? – rxgx

ответ

2

Используйте XML-парсер, не используйте регулярное выражение для разбора xml.

0

Если нет других тегов внутри <education> элемента, я хотел бы изменить эту часть:

<education>([^<>]*)</education> 

Если возможно, я хотел бы использовать ту же технику, и везде вы используете .*. В случае атрибута language, он будет принимать эту форму:

language="([^"]*)" 
Смежные вопросы