Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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,问题 我试图从输入中提取单词 Pacific Gas & Electric (PG&E), San Diego Gas & Electric (SDG&E), Salt River Project (SRP), Southern California Edison (SCE) 我试着在网上这样做,我的模式是\w\s?&\s?\ 但是当我编写Java程序时,它并没有找到它 private static void findWords() { final Pa

问题

我试图从输入中提取单词

Pacific Gas & Electric (PG&E), San Diego Gas & Electric (SDG&E), Salt River Project (SRP), Southern California Edison (SCE)
我试着在网上这样做,我的模式是\w\s?&\s?\

但是当我编写Java程序时,它并没有找到它

private static void findWords() {
    final Pattern PATTERN = Pattern.compile("(\\w\\s?&?\\s?\\(?\\)?)");
    final String INPUT = "Pacific Gas & Electric (PG&E), San Diego Gas & Electric (SDG&E), Salt River Project (SRP), Southern California Edison (SCE)";

    final Matcher matcher = PATTERN.matcher(INPUT);
    System.out.println(matcher.matches());
}
它返回False

问题:

为什么会有错配,好像我对这里的理解很差 我怎样才能把这些词作为一个组说出来,意思是太平洋煤气电气公司的PG&E作为match Group 1等等 Matchermatches仅在整个字符串与正则表达式匹配时返回true

正如您在在线matcher中所看到的,正则表达式匹配的不是整个字符串,而是单个字符,有时甚至更多。你的正则表达式匹配P,a,c,i等等。您应该首先修复正则表达式,然后使用Matcherfind和Matchergroup来获取匹配组。

Matchermatches仅在整个字符串与正则表达式匹配时返回true


正如您在在线matcher中所看到的,正则表达式匹配的不是整个字符串,而是单个字符,有时甚至更多。你的正则表达式匹配P,a,c,i等等。您应该首先修复正则表达式,然后使用Matcherfind和Matchergroup来获取匹配组。

如果您使用Matcherfind方法而不是Matchermatches方法,则结果将为true。原因是,matches方法在末尾假定隐式锚点-克拉和美元。所以它会将整个字符串与正则表达式匹配。如果不是这样,它将返回false。

如果您使用Matcherfind方法而不是Matchermatches方法,那么结果将为true。原因是,matches方法在末尾假定隐式锚点-克拉和美元。所以它会将整个字符串与正则表达式匹配。如果不是这样,它将返回false。

您可能需要重新评估从rubular获得的输出

matches方法尝试根据模式匹配整个输入序列

rubular中的内容会找到一组匹配项,因为几乎每个角色都是匹配项

在你的红宝石结果中没有任何地方会告诉你整个字符串是匹配的。我会重新评估你在那里看到的结果

匹配单词的正则表达式非常简单

你可以用

\b\S*\b 
或者干脆

\S*

根据您的需要

您可能需要重新评估从rubular获得的输出

matches方法尝试根据模式匹配整个输入序列

rubular中的内容会找到一组匹配项,因为几乎每个角色都是匹配项

在你的红宝石结果中没有任何地方会告诉你整个字符串是匹配的。我会重新评估你在那里看到的结果

匹配单词的正则表达式非常简单

你可以用

\b\S*\b 
或者干脆

\S*

根据您的需要

如果您想从字符串中提取匹配项,您可以尝试以下操作:

final String INPUT = "Pacific Gas & Electric (PG&E), San Diego Gas & Electric (SDG&E), Salt River Project (SRP), Southern California Edison (SCE)";
Pattern pattern = Pattern.compile("(.*?\\([^)]+\\))(?:,\\s*|$)");
Matcher m = pattern.matcher(INPUT);
while (m.find()) {
    System.out.println(m.group(1));
}
或者,您也可以执行INPUT.split\\s*,\\s*;如果名称中不包含任何逗号


现在来问一下为什么会出现不匹配,我的理解似乎很差:因为String类的匹配在整个字符串上执行匹配。

如果您想从字符串中获得匹配,这里是您可以尝试的:

final String INPUT = "Pacific Gas & Electric (PG&E), San Diego Gas & Electric (SDG&E), Salt River Project (SRP), Southern California Edison (SCE)";
Pattern pattern = Pattern.compile("(.*?\\([^)]+\\))(?:,\\s*|$)");
Matcher m = pattern.matcher(INPUT);
while (m.find()) {
    System.out.println(m.group(1));
}
或者,您也可以执行INPUT.split\\s*,\\s*;如果名称中不包含任何逗号


现在来问一下为什么会出现不匹配,我的理解似乎很差:因为字符串类的匹配在整个字符串上执行匹配。

FYI:函数之间的差异,并在中的特定于味道的信息下列出。FYI:函数之间的差异,和列在中的风味特定信息下。