匹配任意一个字符 $ 匹配一行的结尾 ^ 匹配一行的开头(在[]里面表示否定) {} 定义了一个范围 [] 定义了一个字符类 () 定义了一个组 *前面出现0次以上 + 前面匹配一次以上 ?前面出现0次或一次 \ 后面的字符不会看作Metacharacter \w 字母数字下划线 \W 非字母数字下划线 \d 单个数字 \D单个非数字 | 或,二者之一 &&与操作符 \b单词边界 Pattern pattern = Pattern.compile("\\{(.+?)\\}+?",Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(str); =================================================================================== /\{\{(.+?)\}\}/g 最前面的“/”与最后面的“/”是分隔符,表示正则表达式的开始与结束。 最后的“g”标志表示正则表达式使用的global(全局)的状态。使用 global 标志表明在被查找的字符串中搜索操作将查找所有符合的项,而不仅仅是第一个。这也被称为全局匹配。【相关的标志还有i(ignoreCase,表示忽略大小写)、m(multiline,表示允许跨行)】 然后我们再来看中间的主体部分:\{\{(.+?)\}\}花括号{}是正则里的限定符。但是我们这里是要找字符串里的花括号,所以前面加个“\”来表示是要找字符的花括号。“\{\{”“\}\}”就是找前后两组花括号。 “.”表示任意字符。“+”表示前面表达式一次乃至多次。“?”表示匹配模式是非贪婪的。 /\{\{(.+?)\}\}/g完整的意思就是:在全部范围内查找匹配前后有两组花括号的字符串。 例如:“{{}}”、“{{asdfasdfasdf56745}}”、“{{yuyuy#$%8787 9+_)(*)87 }}”