Отказ от ответственности:
Как правильно указывают другие, лучше всего использовать выделенный анализатор при работе с нерегулярными языками разметки, такими как XML / HTML.Существует множество способов сбоев в решении регулярных выражений с ложными срабатываниями или пропущенными совпадениями.
При этом ...
Эта конкретная проблема - проблема редактирования одним выстрелом и целевой текст (открытый тег) не является вложенной структурой.Несмотря на то, что есть способы сбоить следующее решение регулярных выражений, оно все равно должно работать довольно хорошо.
Я не знаю синтаксис регулярных выражений в Eclipse, но если он предоставляет отрицательный прогноз, ниже приводится решение для регулярных выражений,будет соответствовать списку определенных целевых элементов, которые не имеют атрибута ID: (во-первых, представлен в зашифрованном синтаксисе режима свободного пространства PHP / PCRE для удобства чтения)
$re_open_tags_with_no_id_attrib = '%
# Match specific element open tags having no "id" attribute.
< # Literal "<" start of open tag.
(?: # Group of target element names.
h:inputText # Either h:inputText element,
| h:otherTag # or h:otherTag element,
| h:anotherTag # or h:anotherTag element.
) # End group of target element names.
(?: # Zero or more open tag attributes.
\s+ # Whitespace required before each attribute.
(?!id\b) # Assert this attribute not named "id".
[\w\-.:]+ # Non-"id" attribute name.
(?: # Group for optional attribute value.
\s*=\s* # Value separated by =, optional ws.
(?: # Group of attrib value alternatives.
"[^"]*" # Either double quoted value,
| \'[^\']*\' # or single quoted value,
| [\w\-.:]+ # or unquoted value.
) # End group of value alternatives.
)? # Attribute value is optional.
)* # Zero or more open tag attributes.
\s* # Optional whitespace before close.
/? # Optional empty tag slash before >.
> # Literal ">" end of open tag.
%x';
А вот то же регулярное выражение в голомсобственный формат -bones, который может быть подходящим для копирования и вставки в окно поиска Eclipse:
<(?:h:inputText|h:otherTag|h:anotherTag)(?:\s+(?!id\b)[\w\-.:]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[\w\-.:]+))?)*\s*/?>
Обратите внимание на группу имен целевых элементов, которые должны быть сопоставлены в начале этого выражения.Вы можете добавить или вычесть нужные целевые элементы в этот список ORed.Также обратите внимание, что это выражение разработано для хорошей работы как для HTML, так и для XML (который может иметь атрибуты без значения, значения атрибутов без кавычек и значения атрибутов в кавычках, содержащие <>
угловые скобки).