使用PCRE
文本:
<xsi:placeOrderResult list="test:value">1469120938131</placeOrderResult></soapenv:Body>希望匹配"<“字符之后(但不包括)、直到":”字符并包括“:”字符的任何字母数字字符,但必须在找到第一个">“字符之前找到冒号。
上面的预期结果是:
<placeOrderResult list="test:value">1469120938131</placeOrderResult></soapenv:Body>第一部分相当简单--我搞不懂的是“冒号必须在第一个>之前找到”。
发布于 2016-07-22 04:22:01
(?<=<)(\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);Regex解释说:
(?<=<) -正后视-匹配字符<.\w+?匹配任何单词字符a-zA-Z0-9_在一到无限次之间,尽可能少的次数,根据需要扩展lazy:匹配字符literally(?=[^<]*?>)正向前视-匹配每个不<的字符在一到无限次之间,尽可能少的次数,需要的惰性扩展。直到它缓存字符>.当您没有为捕获的正则表达式替换任何内容"“时,它会给出您预期的结果:
<placeOrderResult list="test:value">1469120938131</placeOrderResult></soapenv:Body> https://stackoverflow.com/questions/38512774
复制相似问题