2015-06-08 4 views
0

Пользователи, Я использую последнюю версию NotePad ++ и, пожалуйста, мне нужна помощь с RegEx, которая будет искать несколько помеченных слов в указанном вами порядке. Ниже приведен пример, который я подготовил:.RegEx, чтобы найти несколько тегов в указанном порядке

<first> <second> <third> - Представлять три метки в порядке, мне нужно регулярное выражение, чтобы найти их в

<second> <first> <third> - Эти теги не в порядке, мне нужно, и поэтому я хочу RegEx игнорировать их в поиске.

<third> <second> <first> <second> <second> - Эти теги не в том порядке, в котором я нуждаюсь, а также включают повторяющиеся теги. Мне не нужен RegEx для включения в поиск.

Я уже попробовал этот RegEx: (first | second | third)

Тем не менее, кажется, дает мне дополнительные данные, которые я не хочу. Любая помощь будет оценена.

+0

Почему бы не просто '(первая вторая треть)'? Обеспечивает порядок, гарантирует, что все три существуют ... – knolleary

+0

Это недопустимо XML. Вы имеете в виду '' или ' матч здесь'? – Sobrique

ответ

0

попробовать:

<first>[^<>]*<second>[^<>]*<third> 
+0

Кажется, он более эффективен по сравнению с тем, что я использую. Спасибо за помощь. – Matrix

0

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

Таким образом, реальный ответ - использовать xpath, который является выражением XML, которое ... скорее похоже на путь к каталогу. В качестве иллюстративного примера в perl (который будет работать в Windows).

#!/usr/bin/perl 
use strict; 
use warnings; 

use XML::Twig; 

my $twig = XML::Twig->new('pretty_print' => 'indented')->parse(\*DATA); 

foreach my $match ($twig->root->get_xpath('//first/second/third')) { 
    print $match ->text, "\n"; 
} 

$twig->print; 

__DATA__ 
<root> 
<first> 
    <second> 
     <third>match here</third> 
    </second> 
</first> 
<second> 
    <first> 
     <third>not a match</third> 
    </first> 
</second> 
<first> <second> 
     <third>another match here</third></second> 
</first> 
<someparent> 
    <another> 
     <first><second><third>deeper nested match</third></second></first> 
    </another> 
</someparent> 
</root> 

An «XPath» из //first/second/third будет найти элементы, которые вы хотите (// в начале означает «все потомки тока»). Я думаю, что Notepad ++ поддерживает плагины XML.

Смежные вопросы