Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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正则表达式_Java_Regex - Fatal编程技术网

具有无效转义序列的Java正则表达式

具有无效转义序列的Java正则表达式,java,regex,Java,Regex,我对Regex不熟悉 我在地址FORMAT中有数据(字符串[]数组) 范例 105 MyOwn St, City, ON A1B 2C3, Canada 有时我把它当作 - MyOwn st, City, A1B 2C3, Canada - City, A1B 2C3 - 105 MyOwn St, City, ON A1B 2C3 - City, ON A1B 2C3, Canada 我想要下面的结果 Street: 105 MyOwn St or MyOwn st City:

我对Regex不熟悉

我在地址FORMAT中有数据(字符串[]数组)

范例

105 MyOwn St, City, ON A1B 2C3, Canada
有时我把它当作

 -  MyOwn st, City, A1B 2C3, Canada
 - City, A1B 2C3
 - 105 MyOwn St, City, ON A1B 2C3
 - City, ON A1B 2C3, Canada
我想要下面的结果

Street: 105 MyOwn St or MyOwn st
City: City
Postal Code : A1B 2C3
Country : Canada
^ 我已经使用if-else来检查字符串大小。并且使用了一些方法来得到我想要的结果

我想改进我的功能

所以,我现在要做的是,创建一些正则表达式模式并使用switch语句

所以,我对regex是新手,我在我的完整字符串上尝试了这个模式,它确实匹配,并在4组中给出了一个结果,我在这里尝试了()

这个模式与我的字符串匹配

但当我在eclipse中尝试它时,它给了我错误

Invalid escape sequence (valid ones are  \b  \t  \n  \f  \r  \"  \'  \\ )

我在我的模式中寻求帮助,为什么我会出现这个错误?没有人能够维护这个正则表达式,更不用说理解它了;最好编写一个简单的解析器。i、 e:

String[] addresses = ...;
for (String address : addresses) {
    String[] parsed = address.split(",");

    String str = parsed[0];
    // etc..  
}

您可以定义一些更具体的规则,但这只是一个示例

没有人能够维护这个正则表达式,更不用说理解它了;最好编写一个简单的解析器。i、 e:

String[] addresses = ...;
for (String address : addresses) {
    String[] parsed = address.split(",");

    String str = parsed[0];
    // etc..  
}

您可以定义一些更具体的规则,但这只是一个示例

反斜杠
\
是java转义符号和正则表达式转义符号

当你使用像e这样的字符串时。g<代码>“\n”,这被视为换行。就像这样,每个
\
都是java字符串中的一个特殊字符。当您想在字符串中使用反斜杠时,必须将其转义,得到一个双反斜杠
\\

您不希望使用java转义序列,而是使用正则表达式序列,因此需要对所有内容进行双重转义:

"^(\\d+\\s+[a-zA-z]+\\s+\\w+)[,](\\s*[a-zA-Z]+)[,](\\s+[a-z|A-Z]{2}\\s+[a-zA-Z][0-9][a-zA-Z]\\s*[0-9][a-zA-Z][0-9])[,](\\s+[a-zA-Z]{6})$"

反斜杠
\
是java转义符号和正则表达式转义符号

当你使用像e这样的字符串时。g<代码>“\n”,这被视为换行。就像这样,每个
\
都是java字符串中的一个特殊字符。当您想在字符串中使用反斜杠时,必须将其转义,得到一个双反斜杠
\\

您不希望使用java转义序列,而是使用正则表达式序列,因此需要对所有内容进行双重转义:

"^(\\d+\\s+[a-zA-z]+\\s+\\w+)[,](\\s*[a-zA-Z]+)[,](\\s+[a-z|A-Z]{2}\\s+[a-zA-Z][0-9][a-zA-Z]\\s*[0-9][a-zA-Z][0-9])[,](\\s+[a-zA-Z]{6})$"

必须添加两个反斜杠才能转义字符串


这应该是:
Pattern datePatt=Pattern.compile(^(\\d+\\s+[a-zA-z]+\\s+\\w+[,](\\s*[a-zA-z]+[,](\\s+[a-z | a-z]{2}\\s+[a-zA-z][0-9][a-zA-z]\\s*[0-9][a-zA-z][0-9])[,](\\s+[a-zA-z]{0-9]),](\\s+[a-zA-z]{6}”)

必须添加两个反斜杠才能转义字符串


这应该是:
Pattern datePatt=Pattern.compile(^(\\d+\\s+[a-zA-z]+\\s+\\w+[,](\\s*[a-zA-z]+[,](\\s+[a-z | a-z]{2}\\s+[a-zA-z][0-9][a-zA-z]\\s*[0-9][a-zA-z][0-9])[,](\\s+[a-zA-z]{0-9]),](\\s+[a-zA-z]{6}”)

您的模式到处都是错误。普通正则表达式中的模式
\d+
在Java模式中变为
\\d+
,其余的依次类推。您需要双重转义\I相信在修复模式后,您应该测试它以确保它达到预期效果。除此之外,您可能还有其他问题。您的模式充满了错误。普通正则表达式中的模式
\d+
在Java模式中变为
\\d+
,其余的依次类推。您需要双重转义\I相信在修复模式后,您应该测试它以确保它达到预期效果。除此之外,您可能还有其他问题。这是我现在使用的,但我将用我的模式检查完整字符串。如果匹配,我将在下一个类中解析它。这是我现在使用的,但是我将用我的模式检查完整的字符串。如果匹配,我将在下一个类中解析它。