1.使用正则表达式对数字添加分隔逗号,比如123456789可以被分割为123,456,789,注意这个数字可能会在一个长字符串里,这里就是环视的好时机,用java语言可以如此"(?<=\\d)(?=\\d{3}+)"然后替换成,即可,注意如果不用环视的话,可能会造成只加一个逗号的问题,还有就是这个不仅可以匹配 1234$并将其改为1,234$这当然是可以的,但同样1984year也会被改为1,984year这就不太合理了,所以完美的正则表达式是没有的,必须要看应用的实际境况进行取舍。2.字符串取反是否能匹配换行这一特性在不同的语言里都不一样,java里是可以的,这个问题也曾经困扰过我,记录下来。比如我想找<style>本行前面的空格,当然也可能是退格啊或者别的,我就使用了差不多是"\n([^<]*)<style"来寻找,如此这样就把第一个换行到第一个<style中间的全部匹配了。

解决方案 »

  1.   

    1.最近也用了不少正则表达式,虽然都是很初级的应用,不过也累计了一些东西,在整整间隔了一个月之后,可以写一篇记录了。
    我用的参考书是《精通正则表达式》,这也几乎是市面上唯一可以选择的正则表达式方面的权威图书了,翻译的还算差强人意,至少能看懂,使用的语言是java,流派当然也是java的正则流派,使用方法主要借助Pattern和Matcher,虽然刚看起来比较麻烦,实际使用还是很方便的。
    从最简单的说起
    String s = "-12.89px";
    Pattern p = Pattern.compile("[+-]?\\d+(\\.\\d+)?(em|ex|px|pt|pc|in|cm|mm)");
    Matcher m = p.matcher(str);
    if(m.matches){
    //该干嘛干吗
    }
    这里Pattern的p就匹配了字符串s,注意java里面的matcher是匹配全文的,所以无需在首尾加上^和$,还有java字符串和c语言一样,所有使用到反斜杠的地方都要写两遍,如果是字面值反斜杠的话就必须写四遍。从实际情况出发,有个需求"dajiahao1" 拆分成 "dajiahao" + "1" "李连子12" 拆分成 "李连子" + "12" 
    两种简单的解决方式,Pattern为"(\\D+)(\\d+)",或"(.+?)(\\d+)"注意第一种是肯定没问题的,第二种是要小心+是贪婪的特别是和.结合的时候,如果写成"(.+)(\\d+)"会匹配到倒数第二个数字位置,比如xxx12345会被分为xxx1234和5,当然还有一种比较麻烦的方法就是"(.+[^\\d])(\\d)"。正则表达式不区分大小写一般使用i来标明,比如一个字符串是aBc,那么想要匹配它只需要(?i)abc就可以了,所有(?i)之后的字符都不会区分大小写了之前的所有写的所有应用都是针对单行的,实际使用中完全可能是对一个多行文本,那么可能会用到java的一些特别模式,详见Pattern.DOTALL等常数