Mac上的Ruby--跨越两行文本的正则表达式
在PC上,以下Ruby正则表达式匹配数据。但是,在Mac上针对同一输入文本文件运行时,不会出现匹配。我是否以跨平台工作的方式匹配行回报Mac上的Ruby--跨越两行文本的正则表达式,ruby,regex,cross-platform,Ruby,Regex,Cross Platform,在PC上,以下Ruby正则表达式匹配数据。但是,在Mac上针对同一输入文本文件运行时,不会出现匹配。我是否以跨平台工作的方式匹配行回报 data = nil File.open(ARGV[0], "r") do |file| data = file.readlines.join("").scan(/^Name: (.*?)[\r\n]+Email: (.*?)$/) end 版本 PC:ruby 1.9.2p135 Mac:ruby 1.8.6 谢谢你, Ben在使用Windows->
data = nil
File.open(ARGV[0], "r") do |file|
data = file.readlines.join("").scan(/^Name: (.*?)[\r\n]+Email: (.*?)$/)
end
版本PC:ruby 1.9.2p135
Mac:ruby 1.8.6 谢谢你,
Ben在使用Windows->基于Unix(MAC)时,我遇到了以下问题:。从Windows->Unix-based(MAC)运行时,回车符被呈现为Control-M,您的regexp ~可能会正确解释它,也可能不会正确解释它。我遇到了以下问题:。回车符被呈现为Control-M,在Unix(OS X是Unix)上,您的regexp ~可能会正确解释它,也可能不会正确解释它,行尾是\n,而不是\r\n。简单地放置[\n]将在Mac上工作。 要使用跨平台脚本,可能需要先用字符\r\n替换每个序列?在Unix(OS X是Unix)上,行尾是\r\n,而不是\r\n。简单地放置[\n]将在Mac上工作。
要使用跨平台脚本,可能需要先用字符替换每个\r\n序列?问题在于^和$pattern字符!露比没有把R(A.k.A.^)看作一个线边界。如果我修改了模式,用“\r”替换“^”和“$”,则模式会根据需要匹配
data = file.readlines.join.scan(/\rName: (.*?)\rEmail: (.*?)\r/)
我没有修改模式,而是选择对文本执行gsub,在调用scan之前用\r\n替换
data = file.readlines.join.gsub(/\r/, "\n").scan(/^Name: (.*?)\nEmail: (.*?)$/)
感谢各位对我的问题的回答。问题在于^和$pattern字符!露比没有把R(A.k.A.^)看作一个线边界。如果我修改了模式,用“\r”替换“^”和“$”,则模式会根据需要匹配
data = file.readlines.join.scan(/\rName: (.*?)\rEmail: (.*?)\r/)
我没有修改模式,而是选择对文本执行gsub,在调用scan之前用\r\n替换
data = file.readlines.join.gsub(/\r/, "\n").scan(/^Name: (.*?)\nEmail: (.*?)$/)
感谢各位对我的问题的回答。
[\r\n]+
将匹配\r
\n
和\r\n
也许扫描(/^Name:(.*)(\r?\n)+电子邮件:(.?)$/)应该可以做到这一点(不过,您将在数据中捕获\r\n或\r\n,尽管–jaco 12分钟前[\r\n]+
将匹配\r
\n
和\r\n
也许扫描(/^Name:(.*)(\r?\n)+电子邮件:(.*)$/)就可以了(您将捕获数据中的\n或\r\n,尽管–jaco 12分钟前+1。无论实际的行分隔符是什么,正则表达式都应该工作相同:\r\n
,\n
或\r
。可能是数据或正则表达式本身在移动过程中被移动了。+1.正则表达式应该工作相同,无论发生什么情况实际的行分隔符是:\r\n
、\n
或\r
。可能是数据或正则表达式本身在移动过程中被屏蔽了。