这是一个整体简单的正则表达式....
$text = preg_replace('#<sup>'.$key.'(\D*)(?=</sup>)#s', "<sup>".$val."</sup>\\1", $text);
我正在尝试匹配<sup>[insert integer]
和</sup>
之间的任何内容,并移动</sup>
内不应该存在的任何内容。问题是,<sup>122</sup>
$key = 122
这里有什么我明显遗失的吗?
我的数据样本:
ParagraphStyletablebullet><t name=Normal>Office & home visits <i>(includes retail health clinic & online clinic visit )</i></t></p>|$25/visit <sup><br></sup>(<i>deductible waived</i>) <sup>2 aSDF</sup>|30%||||
答案 0 :(得分:1)
我不确定你是如何用PHP写的,我也不确定你需要什么:),但这就是我使用“The Regex Coach”
正则表达式:
(<sup>)(\d*)(.*?)(</sup>)
示例字符串:
ParagraphStyletablebullet><t name=Normal>Office & home visits <i>
(includes retail health clinic & online clinic visit )</i></t>
</p>|$25/visit <sup><br></sup>(<i>deductible
waived</i>) <sup>2 aSDF</sup>|30%||||
替换字符串:
\1\2\4\3
替换结果:
ParagraphStyletablebullet><t name=Normal>Office & home visits <i>
(includes retail health clinic & online clinic visit )</i></t>
</p>|$25/visit <sup></sup><br>(<i>deductible
waived</i>) <sup>2</sup> aSDF|30%||||
答案 1 :(得分:0)
我认为它不起作用,因为你的样本中只有<sup>2 ASD</sup>
。否则,正则表达式应该适用于您的样本。
可能存在嵌套<sup>122 ASD <sup> af </sup> </sup>
。
但那是html解析或者只是它的文本,也许这不是问题。可以使用Perl或C#正则表达式引擎进行递归。如果是我,我会重做正则表达式,不允许嵌套<sup>
:
$text = preg_replace(
"~<sup>$key((?:(?!\\d|<sup>).)*)</sup>~s",
"<sup>$val</sup>$1", $text );
也可能存在其他问题。