[英]Notepad++ regex find results in XML that does not match a certain value
[英]Regex in XML using PHP: find certain value of a certain xml tag
我正在尝试使用正则表达式获取某个 xml 标记中某个属性的值,但无法正确处理,也许有人知道该怎么做?
xml 看起来像这样:
<OTA_PingRQ>
<Errors>
<Error Code="101" Type="4" Status="NotProcessed" ShortText="Authentication refused">Authentication : login failed</Error>
</Errors>
</OTA_PingRQ>
并且 id 喜欢只匹配 Error 标签内的 Shorttext 的值。 最后它应该给我"Authentication refused"
。
到目前为止,我尝试的是使用后向和前瞻,这不允许我采用非固定宽度的量词。 像那样(?<=<Error.).*?(?=>)
。 有人能告诉我如何只匹配短文本的值(在错误标签内)吗?
你没有指定你正在使用的语言,我可以用 PHP 给你解决方案,反正每种语言的正则表达式都是一样的。
这是您正在寻找的正则表达式:
#\<Error Code\=\"[0-9]+\" Type\=\"[0-9]+\" Status\=\"NotProcessed\" ShortText\=\"([a-z 0-9]+)\"\>#is
具体 PHP 用途:
$yourOriginalString = '
<OTA_PingRQ>
<Errors>
<Error Code="101" Type="4" Status="NotProcessed" ShortText="Authentication refused">Authentication : login failed</Error>
</Errors>
</OTA_PingRQ>' ;
preg_match_all('#\<Error Code\=\"[0-9]+\" Type\=\"[0-9]+\" Status\=\"NotProcessed\" ShortText\=\"([a-z 0-9]+)\"\>#im', $yourOriginalString, $result) ;
print_r($result) ;
正则表达式 function 将返回一个数组:
[0] => Array
(
[0] => <Error Code="101" Type="4" Status="NotProcessed" ShortText="Authentication refused">
)
[1] => Array
(
[0] => Authentication refused
)
[0] 是完全匹配 [1] 列出匹配捕获组中的内容:每个 () 在您的正则表达式中设置
一些正则表达式解释:
Type\=\"[0-9]+\"
假设“类型”可以改变并且是任何数字。
ShortText\=\"([a-z 0-9]+)\"
捕获字符串字母数字 + 空格字符串。 如果你需要一些其他的东西,你可以像这样更新:
*[a-z 0-9\!\-]+*
抓住 ! 和 - 太
#is
是标志和忽略 = 大写和换行符
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.