非固定宽度正后视

Posted

技术标签:

【中文标题】非固定宽度正后视【英文标题】:Non-fixed width positive lookbehind 【发布时间】:2018-10-16 11:46:34 【问题描述】:

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

<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"

>

这个正则表达式几乎给了我我想要的:

/(<svg[^<>]*[^<>]*>)/ms

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

/(?<=<svg[^<>]*[^<>]*>)/ms

不起作用 - 我能做什么?

我想在 php 中通过 preg_replace() 函数使用 match 进行替换。

【问题讨论】:

使用/(&lt;svg[^&lt;&gt;]*height=")(\d*\.\d*)("[^&lt;&gt;]*&gt;)/时只需访问第二组值。如果它是用 Swift 编写的,请参阅this post。 它是什么语言或工具? 打算在 php 中使用 preg_replace() 函数,将其添加到帖子中。 使用\K 然后:&lt;svg[^&lt;&gt;]*height="\K[^"]* 当你说'只有浮点值'时,你的意思是小数点后的数字吗? 【参考方案1】:

正如 revo 在 cmets 中提到的(谢谢!),\K 完成了这项工作:

/(?<=<svg[^<>]*[^<>]*>)/ms

将只匹配十进制数字并删除 svg 标记的其余部分。

【讨论】:

以上是关于非固定宽度正后视的主要内容,如果未能解决你的问题,请参考以下文章

css布局1:左右宽度固定中间自适应html布局解决方案(同一侧宽度固定,另一侧自适应)

反应从非静态列调整固定数据表的大小

读取固定宽度格式,其中宽度是从列标题中推断出来的

在 CSS 中,如何获得一个左侧固定宽度的列和一个使用其余宽度的右侧表格?

FragmentTabHostTopDemoFragmentTabHost固定宽度且居中

如何固定一个TD的宽度