正则表达式可选项

时间:2014-04-23 15:43:05

标签: java html regex

如果我有这个正则表达式

print_first = print_first.replace(/ T(op Choice)?/gi, "<span class='top_choice'>&nbsp;Top Choice</span>");

这不应该匹配这些字符串:T,To,Top,Top C,Top Ch,Top Cho,Top Choi,Top Choic,Top Choice?

最好的办法是什么?

2 个答案:

答案 0 :(得分:5)

整个组都是可选的,但它是全部或全部不是逐个字符。因此,您的正则表达式将匹配字符串' T'' Top Choice'

不幸的是,通过角色行为获得那种角色的正则表达式非常难看。您需要一堆嵌套的可选组,如下所示:

/ T(o(p( (C(h(o(i(ce?)?)?)?)?)?)?)?)?/gi

或者,您也可以使用|字符替换。天真的方法会很长,因为你需要列出所有选项,这里的方法试图有点聪明,但仍然可能比所有嵌套组更具可读性:

/ Top Choice?| Top Choi?| Top Ch?| Top ?| To?/gi

因此第一部分匹配' Top Choice'' Top Choic',第二部分匹配' Top Choi'' Top Cho',依此类推。请注意,在正则表达式中较长的部分首先是非常重要的。

答案 1 :(得分:0)

很难使用非丑陋的正则表达式。关于编码,最新的方法是迭代字母并修剪掉最后一个字母。

String r = "TopChoice";
while (r.length() > 0) {
    //Check for match to String r
    r = r.substring(0, r.length() - 1).trim();
}