Java 检查字符串中是否只有一个竖条?使用正则表达式
所以我有一个被问到的xml,它包含如下mediawiki标记: “…收集于12世纪,其中[[亚历山大大帝]] 是英雄,他在其中的代表,有点像 英国[[亚瑟王|亚瑟]] 使用此regexp:Java 检查字符串中是否只有一个竖条?使用正则表达式,java,regex,Java,Regex,所以我有一个被问到的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]+)\\]\\]");
工作正常我得到以下输出:
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}