非固定宽度正向后看

时间:2018-10-16 11:46:35

标签: php regex regex-lookarounds

我正在尝试匹配看起来像这样(多行)的svg文件的svg标签中的height字段:

<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
version="1.1"
id="svg2"
height="1052.36220472"
width="744.094488189">

此正则表达式几乎给了我我想要的东西:

/(<svg[^<>]*height=")(\d*\.\d*)("[^<>]*>)/ms

我只想匹配高度(1052.36220472)的浮点值,所以前行/后行看起来是可行的方法,但是我不能使用非固定宽度的行后行,所以

/(?<=<svg[^<>]*height=")(\d*\.\d*)(?="[^<>]*>)/ms

不起作用-我该怎么办?

我想使用preg_replace()函数将匹配项用于php中的替换。

1 个答案:

答案 0 :(得分:0)

正如revo的评论中所提到的(谢谢!),\K完成了该工作:

/(?<=<svg[^<>]*height=")\K(\d*\.\d*)(?="[^<>]*>)/ms

只会匹配十进制数字,并删除其余的svg标记。