正则表达式,用于以一个引用或多个引号开头和结尾

时间:2017-03-19 22:52:15

标签: java android regex

我正在尝试查找以一个或多个特定开始符号开头和结尾的单词。例如:

:这个:或者 :: test ::或:: test:或:test ::或:: test :::或:test :::::或:::: this:or :: this ::::或:::: :这样的:

以少于两个开头或以少于两个结尾的单词是我要查找的单词。这是我试过的模式:

public static final Pattern PATTERN = Pattern.compile(":{1,2}.*:{1,2}", Pattern.DOTALL);

它不适用于所有情况。对于像这样的一些案例,它失败了:

:::::惊人:::

值得注意的是,以大于或等于两个开头或以大于或等于三结尾的单词也是正确的条目。

2 个答案:

答案 0 :(得分:0)

假设模式中的反引号是错误的,它应该是常规引用:

public static final Pattern PATTERN = Pattern.compile("'{1,2}.*'{1,2}", Pattern.DOTALL);

有两个问题。

(1).匹配任何字符,包括引号。因此,您无法真正限制引号的数量,因为点可以选取额外的引号。使用[^']匹配任何不是引用的字符。

(2)假设#1是固定的,如果单词以1或2个引号开头且以1或2个引号结束,则模式匹配。要实现“或”,您将需要两个由|分隔的模式:一个用以1或2个引号开头的单词,以任何正数引号结束,另一个以任何正数开头的单词结束引号数量,以1或2个引号结束。

这是假设我正确理解了这个问题。

编辑:我在引号之前回答了这个问题,并且问题中的反引号改为了冒号。相应地在我的答案中用“冒号”替换“引号”。请小心对可能使正确答案看错的问题进行如此重大的修改。

编辑2:看起来该角色实际上应该是一个反引号。

答案 1 :(得分:0)

我不确定我理解您的要求,但您可以尝试:

public static final Pattern PATTERN = Pattern.compile("[\"']+(.*?)[\"']+", Pattern.DOTALL);

该表达式捕获2个引号序列之间的单词(每个序列中至少有一个引号)。