Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.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_Gsub - Fatal编程技术网

Ruby 为什么';我的正则表达式不匹配字符串的结尾吗?

Ruby 为什么';我的正则表达式不匹配字符串的结尾吗?,ruby,regex,gsub,Ruby,Regex,Gsub,我试图在用户生成的文本中添加标记来代替换行符 这是我的密码: string.gsub(/(.*)[\n\r\Z$]+/, "<p>\\1</p>") 变成这样: <p>Lorem ipsum dolor sit amet.</p> Vestibulum laoreet erat id quam. <p>Lorem ipsum dolor sit amet.</p> <p>Vestibulum laor

我试图在用户生成的文本中添加
标记来代替换行符

这是我的密码:

string.gsub(/(.*)[\n\r\Z$]+/, "<p>\\1</p>")
变成这样:

<p>Lorem ipsum dolor sit amet.</p> 

Vestibulum laoreet erat id quam.
<p>Lorem ipsum dolor sit amet.</p> 

<p>Vestibulum laoreet erat id quam.</p>
变成这样:

<p>Lorem ipsum dolor sit amet.</p> 

Vestibulum laoreet erat id quam.
<p>Lorem ipsum dolor sit amet.</p> 

<p>Vestibulum laoreet erat id quam.</p>
Lorem ipsum door sit amet.

老街前庭

尝试使用正则表达式

/\A((?:.|[\n\r])+)\Z/
并替换为
\\1

当前正则表达式与输入字符串中的最后一个换行符/回车符匹配,
\Z
甚至不起作用
$
是字符类中的文字字符


如果您想在
之间换行,那么您可以简单地使用:

/^(.+)$/
并替换为
\\1

或者使用正则表达式:

/([^\n\r]+)/
我会这样做:

ary = [
  "Lorem ipsum dolor sit amet.\nVestibulum laoreet erat id quam.",
  "Lorem ipsum dolor sit amet.\nVestibulum laoreet erat id quam.\n"
]

puts ary.map{ |a| 
  a.scan(/.+$/).map{ |s| "<p>#{s}</p>" } 
}
# >> <p>Lorem ipsum dolor sit amet.</p>
# >> <p>Vestibulum laoreet erat id quam.</p>
# >> <p>Lorem ipsum dolor sit amet.</p>
# >> <p>Vestibulum laoreet erat id quam.</p>

对于与模式匹配的每个实例,将向块传递匹配的文本。然后是另一个简单的字符串插值。

这是一个Rails函数。我将编辑问题。另外,第二行(空)会发生什么?还不清楚,还是不清楚。您想用
p
标记环绕每一行,除非该行仅由白色字符组成?这会将所有文本包装在一个
中。每个文本块没有多个
p
s。@Emerson我认为
^$
在Ruby/Rails上的行为可能不同。。。请尝试最后一个正则表达式并告诉我,因为它不使用任何
^$
a.scan(/.+$/).map{ |s| "<p>#{s}</p>" }
puts ary.map{ |a| 
  a.gsub(/.+$/) { |s| "<p>#{s}</p>" }
}
# >> <p>Lorem ipsum dolor sit amet.</p>
# >> <p>Vestibulum laoreet erat id quam.</p>
# >> <p>Lorem ipsum dolor sit amet.</p>
# >> <p>Vestibulum laoreet erat id quam.</p>