如果我有这个正则表达式
print_first = print_first.replace(/ T(op Choice)?/gi, "<span class='top_choice'> Top Choice</span>");
这不应该匹配这些字符串:T,To,Top,Top C,Top Ch,Top Cho,Top Choi,Top Choic,Top Choice?
最好的办法是什么?
答案 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();
}