Поиск тега, содержащего определенный текст? - PullRequest
0 голосов
/ 06 мая 2018

У меня есть полный ввод HTML-файла в виде строки (у меня есть файл) в Java. Текст что-то вроде ниже

Sample input
    Some text........... <s:message code="some code" arguments="${arg1,arg2}" />..
    some text  ........
    some text  ....... <s:message code="some code" 
     />...........

Вот шаги, которые мне нужны для химической завивки

  1. У меня есть список готовых кодов в списке. Я хочу повторить каждый код из список, а затем захватить вмещающий тег сообщения вокруг этого кода, если Код соответствует.
  2. Затем выполните некоторую логику на основе значения кода.
  3. Замените это сообщение новым значением.

В основном мне нужно заменить весь текст <s:message code....> в зависимости от типа кода. Например, если code = code1, замените тег s: message на test1

sample output
    Some text........... new text..
    some text  ........
    some text  ....... new text...........

Я не понимаю, как выполнить шаг 1, то есть захват тега с вложенным сообщением?

1 Ответ

0 голосов
/ 06 мая 2018

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

В целях замены все совпадение является тегом.

Необработанное регулярное выражение:
<s:message(?=\s)(?=(?:[^>"']|"[^"]*"|'[^']*')*?\scode\s*=\s*(?:(['"])([\S\s]*?)\1))\s+(?:"[\S\s]*?"|'[\S\s]*?'|[^>]*?)+/>

Регулярное выражение:
"<s:message(?=\\s)(?=(?:[^>\"']|\"[^\"]*\"|'[^']*')*?\\scode\\s*=\\s*(?:(['\"])([\\S\\s]*?)\\1))\\s+(?:\"[\\S\\s]*?\"|'[\\S\\s]*?'|[^>]*?)+/>"

Проверено: https://regex101.com/r/LgweAW/1


Обратите внимание, что если вы хотите найти определенный набор из кодов ,
как 1,4,22,9 в регулярном выражении, просто замените эту строку

( [\S\s]*? ) # (2), The Code

с вашим конкретным регулярным выражением, как это

( (?:1|4|22|9) ) # (2), One of these Codes


Версия для чтения:

                        # Begin Message tag
 < s:message
 (?= \s )
 (?=                    # Asserttion (a pseudo atomic group)
      (?: [^>"'] | " [^"]* " | ' [^']* ' )*?
      \s code \s* = \s* 
      (?:
           ( ['"] )               # (1), Quote
           ( [\S\s]*? )           # (2), The Code
           \1 
      )
 )
                        # Have the code, just match the rest of tag
 \s+ 
 (?: " [\S\s]*? " | ' [\S\s]*? ' | [^>]*? )+

 />                     # End self contained tag
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...