使用PCRE
文本:
<xsi:placeOrderResult list="test:value">1469120938131</placeOrderResult></soapenv:Body>
想要匹配(但不包括)“&lt;”之后的任何字母数字字符字符,UP和包括“:”字符,但必须在FIRST“&gt;”之前找到冒号找到了。
上述预期结果将是:
<placeOrderResult list="test:value">1469120938131</placeOrderResult></soapenv:Body>
第一部分是相当直接的 - 我无法弄清楚的是“必须在第一个&gt;之前找到冒号”。
答案 0 :(得分:0)
(?<=<)(\w+?:)(?=[^<]*?>)
$re = "/(?<=<)(\\w+?:)(?=[^<]*?>)/";
$str = "#Text:\n<xsi:placeOrderResult list=\"test:value\">1469120938131</placeOrderResult></soapenv:Body>\n\n#Expected result\n<placeOrderResult list=\"test:value\">1469120938131</placeOrderResult></soapenv:Body>";
$subst = "";
$result = preg_replace($re, $subst, $str, 1);
正则表达式解释:
(?<=<)
- 正面Lookbehind - 匹配角色<
。
\w+?
在一次和无限次之间匹配任何单词字符[a-zA-Z0-9_],尽可能少,根据需要进行扩展[懒惰]
:
字面匹配字符:
(?=[^<]*?>)
正向前瞻 - 在一次和无限次之间匹配每个字符<
,尽可能少,根据需要扩展[懒惰]。直到它到达角色>
。如果你没有删除任何东西,&#34;&#34;,对于捕获的正则表达式,它会给出你的预期结果:
<placeOrderResult list="test:value">1469120938131</placeOrderResult></soapenv:Body>