代码之家  ›  专栏  ›  技术社区  ›  COLD ICE

检查字符串中是否只有一个竖条|?使用正则表达式

  •  1
  • COLD ICE  · 技术社区  · 10 年前

    所以我有 same example here 这是一个包含以下mediawiki标记的xml:

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

    使用此正则表达式:

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

    工作正常 我得到了这个输出:

    Alexander the Great
    King Arthur|Arthur
    

    问题是 :如果我有这样的文字 [[Alexander|the |Great]] 具有两个或多个垂直杆, 这不应该匹配,但它匹配。

    所以我改变了正则表达式,只匹配一个垂直条,但没有成功:

    Pattern p = Pattern.compile("\\[\\[([\\w |? \\w]+)\\]\\]");
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   Rohit Jain    10 年前

    您可以使用此选项:

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

    或者,如@fge的评论:

    Pattern p = Pattern.compile("\\[\\[([\\w ]+(?:\\|[\\w ])?)\\]\\]");
    
        2
  •  1
  •   Dropout    10 年前

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

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

    然而,这只说明了管道不是第一个或最后一个字符的情况,但从您的问题来看,这种情况不应该发生。