0

使用随附的正则表达式,我可以在 nfc_support" value="true 在少数情况下匹配提取 'model_name' 值。但是,我无法让它匹配下面显示的其他实例。在这两种情况下使其匹配的任何帮助将不胜感激。

前任:

<capability name=\"model_name\"[A-Za-z1-9"=();,._/<>\s]*<capability name=\"nfc_support\"           value=\"true\"/>

将与:

<capability name="model_name" value="T11"/>
<capability name="brand_name" value="Turkcell"/>
<capability name="marketing_name" value="Campaign"/>
</group>
<group id="chips">
<capability name="nfc_support" value="true"/>
</group>

但不能匹配这个:

<capability name="model_name" value="U8650"/>
<capability name="brand_name" value="Huawei"/>
<capability name="marketing_name" value="Sonic"/>
</group>
<group id="chips">
<capability name="nfc_support" value="true"/>
4

2 回答 2

2

您的正则表达式将匹配第一个 model_name 和最后一个 nfc_support = true 之间的所有内容,因为您使用了贪婪量词*。如果您在应用正则表达式的同一字符串中多次出现 nfc_support ,则会出现问题,因为它会一直搜索直到找到 <capability name = "nfc_support" value = "true"/>. 选择性匹配可能多次出现的文本的更好做法是使用不情愿的贪婪量词:*?,以避免匹配太多。

假设所有行都遵循 model_name、brand_name、marketing_name、/group、group id 和 nfc_support 的格式,则强制执行此格式的正则表达式为:

(?s)<capability name=\"model name\" value=\"(.*?)\"/>\n<capability name=\"brand_name\" value=\"(.*?)\"/>\n<capability name=\"marketing_name\" value=\"(.*?)\"/>\n</group>\n<group_id=\"chips\">\n<capability name=\"nfc_support\" value=\"true\"/>

如果这个正则表达式中有错别字,请提前道歉,但你明白了它的要点......

仅当 nfc_support 为“true”时,此正则表达式才会将 model_name、brand_name 和 marketing_name 的值分别存储到组 $1、$2 和 $3 中。(?s)启用多行搜索。

于 2013-08-05T19:34:33.347 回答
0

如果我错了,请原谅我,但它看起来像你的表达:

[A-Za-z1-9"=();,._/<>\s]

不占您的角色类别中的 0(显示为 1-9),因此应该是:

[A-Za-z0-9"=();,._/<>\s]

编辑:这是关于您的“model_name”值=“U8650”不匹配的示例

于 2013-08-05T18:57:50.880 回答