Ruby on rails 用于从某些文本中删除某些变量数值的正则表达式
我想用470替换下面代码中数字300的所有4个实例(我的网站用户在创建新博客文章时将粘贴这些实例)Ruby on rails 用于从某些文本中删除某些变量数值的正则表达式,ruby-on-rails,regex,gsub,Ruby On Rails,Regex,Gsub,我想用470替换下面代码中数字300的所有4个实例(我的网站用户在创建新博客文章时将粘贴这些实例) <div> <object width="300" height="300"> <embed src="link-removed" width="300" height="300"></embed> </object> <p> <a href="another-link">link<
<div>
<object width="300" height="300">
<embed src="link-removed" width="300" height="300"></embed>
</object>
<p>
<a href="another-link">link</a>
</p>
</div>
粘贴的代码的宽度和高度可能并不总是300乘300
所以我想我可能需要一个正则表达式,它包含字符串“width=”和“height=”后面的任何数值,同时记住要考虑数字周围的引号。有人能告诉我这是不是最好的方法吗?如果是的话,最好的正则表达式是什么
如果重要的话,粘贴的代码在数据库中存储为“文本”,而不是字符串,因为它相当长(我已经从您在这里看到的粘贴内容中删除了几百个字符).您可以找到(width | height)=“\d+”
,并将其替换为$1=“470”
。这将宽度
或高度
捕获到组1中,在替换字符串中,您将此捕获的字符串称为$1
根据需求,模式可能变得更复杂。如果您想自由使用空格,可以在=
周围使用\s*
;为了防止匹配,例如,tablewidth=“300”
,可以在模式前面加上\b
,等等
另见
关于捕获群
(…)
结构就是所谓的“捕获组”
给定此测试字符串:
i have 35 dogs, 16 cats and 10 elephants
然后(\d+)(猫|狗)
产生2个匹配结果()
- 结果1:
35只狗
- 第1组捕获
35
- 第2组捕获
狗
- 第1组捕获
- 结果2:
16只猫
- 第1组捕获
16
- 第2组捕获猫
- 第1组捕获
红宝石色 在替换字符串中,Ruby使用
\
而不是$
作为对捕获组的反向引用的标志
:如果使用字符串作为替换,则无法将匹配中的特殊变量(如$&
和$1
)替换到该字符串中,因为替换到字符串中的时间在模式匹配开始之前。但是,序列\1
、\2
等可用于插入匹配中的连续组
因此,您正在寻找的解决方案如下:
text = 'blah blah width="300" and height="299" more blah'
puts text.gsub(/(width|height)="\d+"/, '\1="470"')
这张照片是()的:
您可以找到(宽度|高度)=“\d+”
,并将其替换为$1=“470”
。这将宽度
或高度
捕获到组1中,在替换字符串中,您将此捕获的字符串称为$1
根据需求,模式可能变得更复杂。如果您想自由使用空格,可以在=
周围使用\s*
;为了防止匹配,例如,tablewidth=“300”
,可以在模式前面加上\b
,等等
另见
关于捕获群
(…)
结构就是所谓的“捕获组”
给定此测试字符串:
i have 35 dogs, 16 cats and 10 elephants
然后(\d+)(猫|狗)
产生2个匹配结果()
- 结果1:
35只狗
- 第1组捕获
35
- 第2组捕获
狗
- 第1组捕获
- 结果2:
16只猫
- 第1组捕获
16
- 第2组捕获猫
- 第1组捕获
红宝石色 在替换字符串中,Ruby使用
\
而不是$
作为对捕获组的反向引用的标志
:如果使用字符串作为替换,则无法将匹配中的特殊变量(如$&
和$1
)替换到该字符串中,因为替换到字符串中的时间在模式匹配开始之前。但是,序列\1
、\2
等可用于插入匹配中的连续组
因此,您正在寻找的解决方案如下:
text = 'blah blah width="300" and height="299" more blah'
puts text.gsub(/(width|height)="\d+"/, '\1="470"')
这张照片是()的:
我认为这是在互联网上给我的最有用的答案-非常感谢Polygene润滑油-我现在不那么害怕regex's我认为这是在互联网上给我的最有用的答案-非常感谢Polygene润滑油-我现在不那么害怕regex's