用Ruby中的一个标记替换顺序重复标记
我正在尝试使用Ruby将多个连续的用Ruby中的一个标记替换顺序重复标记,ruby,regex,Ruby,Regex,我正在尝试使用Ruby将多个连续的标记替换为一个标记 例如: Hello <br><br/><br> World! 你好 世界! 将成为 Hello <br> World! 你好 世界! 您可以使用正则表达式执行此操作,如: "Hello\n<br><br/><br>\nworld".gsub(/(?im)(<br\s*\/?>\s*)+/,'<br>') 这将产生如下输出:
标记替换为一个
标记
例如:
Hello
<br><br/><br>
World!
你好
世界! 将成为
Hello
<br>
World!
你好
世界! 您可以使用正则表达式执行此操作,如:
"Hello\n<br><br/><br>\nworld".gsub(/(?im)(<br\s*\/?>\s*)+/,'<br>')
这将产生如下输出:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>Hello
<br>
World!</p></body></html>
你好
世界
(解析器将您的输入转换为格式良好的文档,这就是为什么您有DOCTYPE和封装的
标记。)我认为im
需要在最后运行,目前它没有做任何事情,因为它只在自己的括号内运行。同样,这与
不匹配。因此,我认为模式应该是/(\s*)+/im
,除非我把正则表达式搞砸了(这是很有可能的)。你可以使用(?im)
语法在正则表达式中切换选项。我不确定是否值得让这个示例变得更复杂,但是我将其更改为匹配尾随/
@Andrew:没问题,(?…)
中的修饰符一直处于打开状态,直到使用(?-…)
再次关闭它们。例如,这匹配:“hEllo”=~/(?i)He(?-i)llo/
,但如果您将正则表达式的结尾更改为llo/
,则不会匹配。安德鲁:啊,我看到了混淆-我没有意识到您提到的其他语法存在。这就是在修饰符之后有:
后跟括号内的正则表达式的某个部分,因此与我的示例相当的是:“hEllo”=~/(?i:He)llo/
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>Hello
<br>
World!</p></body></html>