Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 用于从某些文本中删除某些变量数值的正则表达式_Ruby On Rails_Regex_Gsub - Fatal编程技术网

Ruby on rails 用于从某些文本中删除某些变量数值的正则表达式

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<

我想用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</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组捕获
  • 结果2:
    16只猫
    • 第1组捕获
      16
    • 第2组捕获猫
工具书类

红宝石色 在替换字符串中,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组捕获
  • 结果2:
    16只猫
    • 第1组捕获
      16
    • 第2组捕获猫
工具书类

红宝石色 在替换字符串中,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