java - 正则表达式可选项目

标签 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?

这样做的更好方法是什么?

最佳答案

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

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

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

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

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

所以第一部分将匹配 'Top Choi''Top Choic',第二部分将匹配 'Top Choi''Top Cho',等等。请注意,较长的部分在正则表达式中排在第一位非常重要。

关于java - 正则表达式可选项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23249257/

相关文章:

java - Android/Java "Convert"字符串到按钮

java - Java 中的颜色类

html - Bootstrap 按钮内的 muli 元素 - 按钮变形

javascript - 如何将分页添加到 UI-Bootstrap Typeahead 指令

mysql - 如何从 WordPress (MySQL) 中的多个帖子中删除宽度和高度属性

java - 在Java文件夹中创建新文件

java - 如何通过jSTL jsp读取并解析存储在request中的xml字符串

html - 为什么 HTML 中 "size"标记中的 "&lt;input&gt;"属性仅适用于 TEXT 而不适用于 NUMBER?

regex - 将 bash 数组元素传递给循环内的 awk 正则表达式

regex - sed 用 C++ 注释替换(单行)C 注释