gpt4 book ai didi

用于查找没有特定属性的元素的正则表达式(例如 "id")

转载 作者:行者123 更新时间:2023-12-02 00:28:59 25 4
gpt4 key购买 nike

我正在浏览 JSF 项目中大量基于 XML 的文件,并希望找到缺少 ID 属性的某些组件。例如,假设我想找到所有 <h:inputText /> 没有的元素指定了 id 属性。

我在 RAD (Eclipse) 中尝试了以下方法,但有些地方不太对劲,因为我仍然得到一些确实具有有效 ID 的组件。

<([hf]|ig):(?!output)\w+\s+(?!\bid\b)[^>]*?\s+(?!\bid\b)[^>]*?>

不确定我的负前瞻是否正确?

期望的结果是我会在项目的任何 JSP 中找到以下(或类似的):

<h:inputText value="test" />

...但不是:

<h:inputText id="good_id" value="test" />

我只是在使用 <h:inputText/>举个例子。我试图比这更广泛,但绝对不包括 <h:outputText/> .

最佳答案

免责声明:

正如其他人正确指出的那样,在处理非常规标记语言(例如 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';

这里是原始格式的相同正则表达式,可能适合复制并粘贴到 Eclipse 搜索框中:

<(?:h:inputText|h:otherTag|h:anotherTag)(?:\s+(?!id\b)[\w\-.:]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[\w\-.:]+))?)*\s*/?>

注意这个表达式开头要匹配的目标元素名称组。您可以向此或列表添加或减去所需的目标元素。另请注意,此表达式设计用于 HTML 和 XML(可能具有无值属性、未加引号的属性值和包含 <> 尖括号的带引号的属性值)。

关于用于查找没有特定属性的元素的正则表达式(例如 "id"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7758046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com