regex - 使用 PHP 的 XML 中的正则表达式:查找某个 xml 标记的某个值
问题描述
我正在尝试使用正则表达式获取某个 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) ;
正则表达式函数将返回一个数组:
[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
是标志和忽略 = 大写和换行符
推荐阅读
- python - 如何重新排序一个 numpy 数组(矩阵),使得 Matrix = [ Identity | Residue ](只是移动列)
- javascript - 我怎样才能第二次使用停止?
- android - 无法在 Kotlin 的电子邮件编写器中获取“粗体”HTML 文本
- python - Matplotlib 子图轴在绘制数据后改变大小
- c# - 对接口进行编程是否允许您不重新编译代码?
- neo4j - 无法使用 MATCH 和 MERGE 匹配和创建节点
- python - 通过 API 从我的个人电报帐户发送消息
- python - 使用“createdb”将 Wagtail 站点部署到 Heroku 时连接被拒绝
- reactjs - 为什么 react-redux 将 store 传递给上下文?
- r - 标记库中的lookfor() 中出现重音字符或缺失值的错误?