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>