Это регулярное выражение, необходимое для соответствия Коду .
Вам нужен обратный вызов, если вы хотите, чтобы он был интеллектуальным,
то есть на основе кода , который находится в группе захвата 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