Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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中的一个标记替换顺序重复标记_Ruby_Regex - Fatal编程技术网

用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>') 这将产生如下输出:

我正在尝试使用Ruby将多个连续的

标记替换为一个

标记

例如:

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>