php网站建设找哪家好,建设机械官方网站,编程课哪个机构最好,网站系统架构图正则表达式零宽断言 工具类#xff0c;正则表达式匹配文本内容正则表达式语法例子例子01零宽断言? 不包含左边值? 不包含右边值例子 常用正则表达式校验数字的表达式校验字符的表达式 工具类#xff0c;正则表达式匹配文本内容
/*** 正则表达式工具类*/
public class… 正则表达式零宽断言 工具类正则表达式匹配文本内容正则表达式语法例子例子01零宽断言? 不包含左边值? 不包含右边值例子 常用正则表达式校验数字的表达式校验字符的表达式 工具类正则表达式匹配文本内容
/*** 正则表达式工具类*/
public class RegexUtil {/*** 正则表达式匹配文本内容* param text 需要查找的内容* param regex 配置正则表达式* return 匹配到的内容列表*/public static ListString getList(String text, String regex) {Pattern pattern Pattern.compile(regex);Matcher matcher pattern.matcher(text);ListString list new ArrayList();while (matcher.find()) {String group matcher.group();list.add(group);}System.err.println(String.format(group%s, list));return list;}/*** 从文本中匹配正则表达式匹配到的文本列表和目标列表进行对比* param text 需要查找的文本* param regex 正则表达式* param targetArr 目标列表*/public static void findAndCompare(String text, String regex, String[] targetArr) {ListString list RegexUtil.getList(text, regex);Assert.isTrue(list.equals(Arrays.asList(targetArr)), 两个List应该相等);}
}正则表达式语法
字符说明例子\将下一字符标记为特殊字符\n 匹配 换行符\\ 匹配 \ \\( 匹配 ^匹配输入字符串开始的位置$匹配输入字符串结尾的位置––––x|y匹配 x 或 y。z|food 匹配 z或者food (z|f)ood 匹配 zood 或者 food[xyz]字符集。匹配包含的任一字符。[abc]匹配plain中的a[^xyz]反向字符集。匹配未包含的任何字符。[^pla]匹配plain中的 i和n[a-z]字符范围。匹配指定范围内的任何字符。[^a-z]反向范围字符。匹配不在指定的范围内的任何字符。––––{n}n 是非负整数。正好匹配 n 次。zo{2} 匹配 zoo {n,}n 是非负整数。至少匹配 n 次。zo{2,} 匹配 zoo 、zooo、 zoooo 等 {n,m}m 和 n 是非负整数其中 n m。匹配至少 n 次至多 m 次。zo{2,3} 匹配 zoo 、zooo ––––*零次或多次匹配前面的字符或子表达式zo* 匹配 z、zo、zoo 等效于 zo{0,}一次或多次匹配前面的字符或子表达式zo 匹配 zo、zoo 等效于 zo{1,}?零次或一次匹配前面的字符或子表达式do(es)? 匹配 do、does 等效于 do(es){0,1}.匹配除\r\n之外的任何单个字符。若要匹配包括\r\n在内的任意字符请使用诸如[\s\S]之类的模式。––––\b匹配一个字边界即字与空格间的位置。\B非字边界匹配。\d数字字符匹配等效于 [0-9]\D非数字字符匹配等效于 [^0-9]––––\cx匹配 x 指示的控制字符。x 的值必须在 A-Z 或 a-z 之间。\cM 匹配 Control-M 或回车符\xn匹配 n此处的 n 是一个十六进制转义码。十六进制转义码必须正好是两位数长。\x41匹配A \x041与\x041等效\f换页符匹配。等效于 \x0c 和 \cL\n换行符匹配。等效于 \x0a 和 \cJ\r回车符匹配。等效于 \x0d 和 \cM\t制表符匹配。等效于 \x09 和 \cI\v垂直制表符匹配。等效于 \x0b 和 \cK\s任何空白字符匹配。等效于 [ \f\n\r\t\v]\S任何非空白字符匹配。等效于 [^\f\n\r\t\v]\w任何字类字符匹配。等效于 [A-Za-z0-9_]\W任何非单词字符匹配。等效于 [^A-Za-z0-9_]––––(pattern)匹配 pattern 并捕获该匹配的子表达式。(?:pattern)匹配 pattern 但不捕获该匹配的子表达式即它是一个非捕获匹配不存储供以后使用的匹配。industr(?:y|ies) 匹配 industry 和 industries(?pattern)执行正向预测先行搜索的子表达式该表达式匹配处于匹配 pattern 的字符串的起始点的字符串。它是一个非捕获匹配即不能捕获供以后使用的匹配。Windows (?95|98|NT|2000) 匹配 “Windows 2000” 中的 Windows 不匹配 Windows 3.1中的 Windows
例子
例子01
public class RegexDemo01 {Testpublic void test01() {// \ 将下一字符标记为特殊字符RegexUtil.findAndCompare(北京市(海定区), \\(, new String[] {(});// ^ 匹配输入字符串开始的位置RegexUtil.findAndCompare(abc, add, add, ^a\\w, new String[] {abc});// $ 匹配输入字符串结尾的位置RegexUtil.findAndCompare(abd, ddd, abd, \\wd$, new String[] {abd});}Testpublic void test02() {// 匹配或者关系RegexUtil.findAndCompare(hello, z and food, z|food, new String[] {z, food});RegexUtil.findAndCompare(zood, z and food, (z|f)ood, new String[] {zood, food});// 字符集。匹配包含的任一字符。RegexUtil.findAndCompare(plain, [abc], new String[] {a});// (在[]中被当成普通字符RegexUtil.findAndCompare(plain (xzy), [ab(z)c], new String[] {a, (, z, )});// 字符集。匹配包含的任一字符。RegexUtil.findAndCompare(plain, [^pla], new String[] {i, n});}Testpublic void test03() {String text abc, zoooG, zoo, zoom!, bzoo!;// {n} n 是非负整数。正好匹配 n 次RegexUtil.findAndCompare(text, zo{3}, new String[] {zooo});// {n,} n 是非负整数。至少匹配 n 次。RegexUtil.findAndCompare(text, zo{2,}, new String[] {zooo, zoo, zoo, zoo});// {n,m} m 和 n 是非负整数其中 n m。匹配至少 n 次至多 m 次。RegexUtil.findAndCompare(text, zo{3,4}, new String[] {zooo});}Testpublic void test04() {String text abcz, zoy, zoooG, zoo, zoom!, bzoo!;// * 零次或多次匹配前面的字符或子表达式RegexUtil.findAndCompare(text, zo*, new String[] {z, zo, zooo, zoo, zoo, zoo});// 一次或多次匹配前面的字符或子表达式RegexUtil.findAndCompare(text, zo, new String[] {zo, zooo, zoo, zoo, zoo});// ? 一次或多次匹配前面的字符或子表达式RegexUtil.findAndCompare(text, zo(oo)?, new String[] {zo, zooo, zo, zo, zo});}
}零宽断言
? 不包含左边值
(?exp) 也叫零宽度正回顾后发断言它断言自身出现的位置的前面能匹配表达式exp 例如(?\bdanc)\w\b 查找 I’m dancing它会匹配 ing
? 不包含右边值
(?exp) 也叫零宽度正预测先行断言它断言自身出现的位置的后面能匹配表达式exp 例如“\b\w(?ing\b)” 查找 I’m dancing它会匹配 danc
例子
public class RegexDemo09 {Test// 匹配 一个ing结尾的单词public void test01() {String text Pingpong, Im singing while youre dancing.;String regex \\b\\w(?ing\\b)ing;RegexUtil.findAndCompare(text, regex, new String[] {singing, dancing});}Test// 匹配 一个sing开头的单词public void test02() {String text Pingpong, Im singing while youre dancing.;String regex sing(?\\bsing)\\w\\b;RegexUtil.findAndCompare(text, regex, new String[] {singing});}Test// 匹配 ()里面的内容public void test03() {String text 北京市(海定区)(朝阳区)(西城区);String regex (?\\().*?(?\\));RegexUtil.findAndCompare(text, regex, new String[] {海定区, 朝阳区, 西城区});}Test// 匹配 string/string里面的内容public void test04() {String text string小帅/string;String regex (?\\string\\).*?(?\\/string\\);RegexUtil.findAndCompare(text, regex, new String[] {小帅});}// Test// 匹配 string metaxx/string里面的内容string里面可以有不确定属性public void test05() {String text string小帅/string 飞机 string metautf-8小妞/string;String regex (?\\string\\b(\\w)\\b\\).*?(?\\/string\\);RegexUtil.findAndCompare(text, regex, new String[] {小帅});}
}常用正则表达式
校验数字的表达式
描述表达式n位的数字^\d{n}$至少n位的数字^\d{n,}$m-n位的数字^\d{m,n}$零和非零开头的数字^(0|[1-9][0-9]*)$非零开头的最多带两位小数的数字^([1-9][0-9]*)(.[0-9]{1,2})?$带1-2位小数的正数或负数^(-)?\d(.\d{1,2})$正数、负数、和小数^(-|)?\d(.\d)?$有两位小数的正实数2(.[0-9]{2})?$有1~3位小数的正实数3(.[0-9]{1,3})?$非零的正整数4\d*$ 或 ^([1-9][0-9]){1,3}$ 或 ^?[1-9][0-9]$非零的负整数^-[1-9][]0-9$ 或 ^-[1-9]\d$非负整数^\d$ 或 5\d*|0$非正整数^-[1-9]\d*|0$ 或 ^((-\d)|(0))$非负浮点数^\d(.\d)?$ 或 6\d*.\d*|0.\d*[1-9]\d*|0?.0|0$非正浮点数^((-\d(.\d)?)|(0(.0)?))$ 或 ^(-([1-9]\d*.\d*|0.\d*[1-9]\d*))|0?.0|0$正浮点数7\d*.\d*|0.\d*[1-9]\d*$ 或 ^(([0-9].[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9])|([0-9][1-9][0-9]))$负浮点数^-([1-9]\d*.\d*|0.\d*[1-9]\d*)$ 或 ^(-(([0-9].[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9])|([0-9][1-9][0-9])))$浮点数^(-?\d)(.\d)?$ 或 ^-?([1-9]\d*.\d*|0.\d*[1-9]\d*|0?.0|0)$
校验字符的表达式