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
Mac上的Ruby--跨越两行文本的正则表达式_Ruby_Regex_Cross Platform - Fatal编程技术网

Mac上的Ruby--跨越两行文本的正则表达式

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->

在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->基于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
。可能是数据或正则表达式本身在移动过程中被屏蔽了。