Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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
使用Java在Windows而不是Linux上工作的简单正则表达式_Java_Regex - Fatal编程技术网

使用Java在Windows而不是Linux上工作的简单正则表达式

使用Java在Windows而不是Linux上工作的简单正则表达式,java,regex,Java,Regex,在windows下使用Eclipse,我试图将文本分为两部分,一部分从开始到第一行结束,另一部分是它的其余部分 String[] result = resumen.split("\\R", 2); String firstpart = result[0]; String rest = result[1]; 工作正常 但是在Linux机器上,我得到了一个错误: Exception in thread "main" java.util.regex.PatternSyntaxException: I

在windows下使用Eclipse,我试图将文本分为两部分,一部分从开始到第一行结束,另一部分是它的其余部分

String[] result = resumen.split("\\R", 2);
String firstpart = result[0];
String rest = result[1];
工作正常

但是在Linux机器上,我得到了一个错误:

Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 1
\R
所以我在网上的某个地方读到了,这样我就可以使用:

String[] result = resumen.split("\\\\R", 2);
但这并没有像预期的那样起作用,也没有分裂句子

如何调整代码,使其也能在linux机器上工作


提前感谢。

听起来Linux机器有一个较旧版本的Java,并且
\R
是在该版本之后添加的

\R
在中。它不在里面

如果您需要支持Java 7,文档会说
\R
相当于
\u000D\u000A |[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]

基于此:

String[] result = resumen.split("\\u000D\\u000A|[\\u000A\\u000B\\u000C\\u000D\\u0085\\u2028\\u2029]", 2);
但我认为,如果我们将这些字符作为文字字符而不是unicode转义符提供给正则表达式引擎,我们就可以了,因此:

String[] result = resumen.split("\u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]", 2);

(但是测试一下。)

听起来像Linux机器有一个旧版本的Java,并且
\R
是在该版本之后添加的

\R
在中。它不在里面

如果您需要支持Java 7,文档会说
\R
相当于
\u000D\u000A |[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]

基于此:

String[] result = resumen.split("\\u000D\\u000A|[\\u000A\\u000B\\u000C\\u000D\\u0085\\u2028\\u2029]", 2);
但我认为,如果我们将这些字符作为文字字符而不是unicode转义符提供给正则表达式引擎,我们就可以了,因此:

String[] result = resumen.split("\u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]", 2);

(但要测试一下。)

@XtremeBaumer:如果目标是跨平台匹配换行符,则不需要。@XtremeBaumer:Windows,但与其说是平台,不如说是字符串内容。如果字符串中有Windows样式的换行符,则在
\n
上拆分将在结果字符串中保留
\r
。看看
\R
的等价物,还有更多奇异的换行符。如果我读一个有两行的文本文件,并使用
System.out.print(line)我没有得到两行作为输出?@XtremeBaumer:这取决于你如何读取文件;听起来断线已经正常化了。但同样,它是关于字符串内容的<代码>“foo\r\nbar”.split(\\n”)[0]。长度()
是4,不是3
“foo\r\nbar”.split(\\r”)[0].length()
根据需要为3。为什么不使用
System.getProperty(“line.separator”)
来获取正确的换行符?@XtremeBaumer:如果目标是跨平台匹配换行符,则不需要。@XtremeBaumer:Windows,但它不是平台,而是字符串内容。如果字符串中有Windows样式的换行符,则在
\n
上拆分将在结果字符串中保留
\r
。看看
\R
的等价物,还有更多奇异的换行符。如果我读一个有两行的文本文件,并使用
System.out.print(line)我没有得到两行作为输出?@XtremeBaumer:这取决于你如何读取文件;听起来断线已经正常化了。但同样,它是关于字符串内容的<代码>“foo\r\nbar”.split(\\n”)[0]。长度()
是4,不是3<代码>“foo\r\nbar”.split(\\r”)[0]。length()根据需要为3。为什么不使用
System.getProperty(“line.separator”)
获取正确的换行符?另请参阅。另请参阅。