1、选中被逗号(或其他符号)分割的字符串当中的某一个值
69,23,69,88,695,69,69,6,765769fd969690,3242,969,69
实例,选中以上字符串所有出现的69部分
(69[,]?)|([,]?69)
javascript
var val = "69"; var exp = new RegExp("(\b"+val+"\b[,]?)|([,]?\b"+val+"\b)","g");
php
$matches = array(); $search = '69,23,69,88,695,69,69,6,765769fd969690,3242,969,69'; $target = '69'; $pattern = '/('.$target.'[,]?)|([,]?'.$target.')/'; preg_match_all ($pattern, $search, $matches);
2、运用环视功能为数字描点
569836495
实例,从数字的第1位起,每三位插入逗号以区分数位
(?<=d)(?=(?:[d]{3})+)
javascript,由于javascript只支持顺序环视,所以写法会跟其他语言有些区别
var subject = "569836495"; var exp = /(d)(?=(d{3})+(?!d))/g; subject.replace(exp, "$1,");
php
$subject = '569836495'; $target = ','; $pattern = '/(?<=d)(?=(?:[d]{3})+)/'; preg_replace($pattern, $target, $subject);
3.匹配引号当中的内容,内容包含转义引号
"([^"]|(?<=\)")*"
但是它不支持引号内包含\"这种形式的字符,因为第一个是为了转义第二个,而"事实上是边界来的,但是被上面的表达式识别成了第二个是为了转义"
并且有很多引擎(如javascript)不支持逆序环视,好在用顺序环视也是可以表达出来的,只不过在写法上会复杂一些:
"([^"\]|((?=\\)[\][\]|(?=\[^"])[\]|(?=\")[\]["]))*"
此表达式由"号开始然后匹配正文,正文允许0到n个匹配,最后以"结束
正文匹配分两部分:
第一部分当遇到不是"和字符则直接匹配;
第二部分当遇到"和字符时,符合子表达式(?=\\)[\][\]|(?=\[^"])[\]|(?=\")[\]["]才匹配;
子表达式很简单:
(?=\\)[\][\]:如果是连续两个\则匹配;
(?=\[^"])[\]:如果是一个,并且后接字符不是"则匹配;
(?=\")[\]["]:如果是"则匹配;
这个表达式只适合NFA引擎,由于NFA引擎的工作原理,匹配是优先的,只有后面还有匹配规则,并且这个规则匹配不上的时候,前面的匹配才会把结果吐出来进行尝试回溯,
所以子表达式当中(?=\\)[\][\]必须要在(?=\[^"])[\]前面,动动脑子想想为什么吧;
4.去除字符串前后字符(trim)
^[suFEFFxA0]+|[suFEFFxA0]+$
这个其实很容易理解,起始位接s+,或者s+接结束位都会被匹配;