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,所以我有一个被问到的xml,它包含如下mediawiki标记: “…收集于12世纪,其中[[亚历山大大帝]] 是英雄,他在其中的代表,有点像 英国[[亚瑟王|亚瑟]] 使用此regexp: Pattern p = Pattern.compile("\\[\\[([\\w | \\w]+)\\]\\]"); 工作正常我得到以下输出: Alexander the Great King Arthur|Arthur 问题:如果我有一个像[[Alexander | The | Great]]这样有两

所以我有一个被问到的xml,它包含如下mediawiki标记:

“…收集于12世纪,其中[[亚历山大大帝]] 是英雄,他在其中的代表,有点像 英国[[亚瑟王|亚瑟]]

使用此regexp:

Pattern p = Pattern.compile("\\[\\[([\\w | \\w]+)\\]\\]");
工作正常我得到以下输出:

Alexander the Great
King Arthur|Arthur

问题:如果我有一个像
[[Alexander | The | Great]]
这样有两个或多个竖条的文本, 这不应该匹配,但它匹配

因此,我将正则表达式更改为只匹配一个竖条,但不起作用:

Pattern p = Pattern.compile("\\[\\[([\\w |? \\w]+)\\]\\]");
您可以使用以下选项:

Pattern p = Pattern.compile("\\[\\[([\\w ]+\\|?[\\w ]*)\\]\\]");
或者,如@fge的评论:

Pattern p = Pattern.compile("\\[\\[([\\w ]+(?:\\|[\\w ])?)\\]\\]");

要查找
[[
]
中包含字母数字字符、空格和一个管道的表达式,可以使用以下正则表达式

\[\[[\w ]+[\|]{1}[\w ]+\]\]

但是,这仅适用于管道不是第一个或最后一个字符的情况,但根据您的问题假设,这种情况不应该发生。

另一种解决方案是(在Java字符串中)
\[\[(\w+(?:\w+)\]\]
Rohit。我测试了你的一个,但我得到了java.util.regex.PatternSyntaxException:在索引12[[([\w]+|?[\w]*])]^@COLDICE附近悬挂的元字符“?”!啊!你需要逃逸
。我忘了。如果你想要一个或没有管道,请将大括号改为{0,1}