各种语言正则表达式语法比较
作者:笑望书 发布时间:December 20, 2011 分类:建站心得
每种编程语言都有自己的正则表达式吗???不是通用的吗?上网时看到 java 正则表达式 js 正则表达式 php 正则表达式 asp.net 正则表达式 vb 正则表达式
一个正则表达式,就是用某种模式去匹配一类字符串的一个公式。正则表达式严格说起来是一个抽象的数学概念,这个东西和SQL语句一样,其实各个语言的实现版本基本上都是相同的,无论是java还是perl、js、vb等语言,他们提供的正则表达式核心都是相同的,只是执行的函数、调用的语法、返回匹配项的获取有一些语法规则上的区别。
PHP与javascript正则表达式区别
正则里面很多语法都是以perl为模版,php本身有两套,一套是perl的语法,另一套是posix的语法,其它都大同小异
以下是它们之间的比较:总体上,PHP的正则比标准javascript的要强大。
PHP有两套正则库,一是posix兼容库(php5.3之前版本可用),而是perl兼容库(主力库)
perl兼容库中支持而js正则不支持的:
1、支持(? 2、许多预置字符类(:alnum:)
3、支持组标识(?<>
4、支持子组同名(?|
5、支持独立子组(?>
6、支持条件子组(?()
7、支持递归子组(?R)
8、支持本地编码,js只支持unicode
9、修正器更多
10、等等等等细节上的丰富。
总之,js的正则库在php正则面前显得只是一个简约的基础库。
编程实现是细节活,粗枝大叶的结果就是问题多多。一定要弄清楚
各种语言工具正则表达式语法比较
sed 4.07 |
|||||||
| 转义 | \ | \ | \ | \ | \ | \ | \ |
| 行头 | ^ | ^ | ^ | ^ | ^ | ^ | ^ |
| 行尾 | $ | $ | $ | $ | $ | $ | $ |
| n个 {n} {m,n} {m,} {,n} | \{n\} | {n} | \{n\} | {n}或\{n\} 仅定义 --posix 或 --re-interval有效(要表达}和{,得用\\{和\\} 没有定义--posix或--re-interval时,不能用{n}的语法, \}\{和}{同义 | {n} | \{n\} | {n} |
| {0,} | * | * | * | *或\*, (要表达*,得用\\*) | * | * | * |
| {1,} | \+ | + | \+ | +或\+, (要表达+, 得用\\+) | + | \+ | + |
| {0,1} | \? | ? | \? | ?或\?, (要表达?, 得用\\?) | ? | \? | ? |
| 任意字符 | . | . | . | . 含\n. | . /s修饰后则含\n | . 除\n | . 除\n |
| (pat) 匹配并获结果 | \(pat\) | (pat) | \(pat\) | (pat)或\(pat\) (要表达括号,用\\( \\) ) | (pat) | \(pat\) | (pat) |
| (?:pat) 匹配但不获结果 | 不支持 | 不支持 | 不支持 | 不支持 | (?:pat) | 不支持 | (?:pat) |
| (?=pat) 等于预查 | 不支持 | 不支持 | 不支持 | 不支持 | (?=pat) | 不支持 | (?=pat) |
| (?!pat) 不等预查 | 不支持 | 不支持 | 不支持 | 不支持 | (?!pat) | 不支持 | (?!pat) |
| | 或 | \| | | | \| | |或\| (要表达|,得用\\|) | | | \| | | |
| 其中任意字符 | [xyz] | [xyz] | [xyz] | [xyz] | [xyz] | [xyz] | [xyz] |
| [.ch.] [=ch=] | 不支持 | 不支持 | [.ch.] | 不支持 | 不支持 | 不支持 | 不支持 |
| 单词边界 \b | \b | \b | \b | 不支持 | \b | 不支持 | \b |
| 非单词边界 \B | \B | \B | \B | 不支持 | \B | 不支持 | \B |
| 单词左右边界 <> | \< \> | \< \> | \< \> | 不支持 (><和\>\<和\\>\\<同义 | 不支持(><和\>\<同义 | \< \> | 不支持(><和\>\<同义 |
| 控制字符 /cx | 不支持 | 不支持 | \cx | 不支持 | \cx | 不支持 | \cx |
| 数字\d | 不支持 | 不支持 | 不支持 | 不支持 | \d | \d | \d |
| 非数字\D | 不支持 | 不支持 | 不支持 | 不支持 | \D | \D | \D |
| 换页 \f | 不支持 | 不支持 | 高版本支持 | \f | \f | 另义 \f表示文件名字符 | \f |
| 换行 \n | 不支持 | 不支持 | 不支持 | \n | \n | \n | \n |
| 回车 \r | 不支持 | 不支持 | \r | \r | \r | \r | \r |
| 空白 \s | 不支持 | 不支持 | 不支持 | 不支持 | \s | \s | \s |
| 非空白 \S | 不支持 | 不支持 | 不支持 | 不支持 | \S | \S | \S |
| 制表符 \t | 不支持 | 不支持 | 高版本支持 | \t | \t | \t | \t |
| 垂直制表符 \v | 不支持 | 不支持 | 高版本支持 | \v | \v | 另义 \v表示very magic | \v |
| 单词字符 \w [A-Za-z0-9_] | \w | \w | \w | 不支持 | \w | \w | \w |
| 非单词字符 \W [^A-Za-z0-9] | \W | \W | \W | 不支持 | \W | \W | \W |
| \xn 16进制 | 不支持 | 不支持 | 高版本支持 | \xn | \xn | 另义 \x表示[0-9A-Za-z] | \xn |
| \n 八进制 | 不支持 | 不支持 | 不支持 | \n | \n | 不支持 | \n |
| \n 后向引用 | \n | \n | \n | \n 仅取结果可用 | \n | \n 仅取结果可用 | \n |
| [:alnum:] 字母和数字 | [:alnum:] | [:alnum:] | [:alnum:] | [:alnum:] | [:alnum:] | [:alnum:] | 不支持 |
| [:alpha:] 字母 | [:alpha:] | [:alpha:] | [:alpha:] | [:alpha:] | [:alpha:] | [:alpha:] | 不支持 |
| [:cntrl:] 控制字符 | [:cntrl:] | [:cntrl:] | [:cntrl:] | [:cntrl:] | [:cntrl:] | [:cntrl:] | 不支持 |
| [:digit:] 数字 | [:digit:] | [:digit:] | [:digit:] | [:digit:] | [:digit:] | [:digit:] | 不支持 |
| [:graph:] 可打印字符(不含空格) | [:graph:] | [:graph:] | [:graph:] | [:graph:] | [:graph:] | [:graph:] | 不支持 |
| [:lower:] 小写 | [:lower:] | [:lower:] | [:lower:] | [:lower:] | [:lower:] | [:lower:] | 不支持 |
| [:print:] 可打印字符(含空格) | [:print:] | [:print:] | [:print:] | [:print:] | [:print:] | [:print:] | 不支持 |
| [:punct:] 标点 | [:punct:] | [:punct:] | [:punct:] | [:punct:] | [:punct:] | [:punct:] | 不支持 |
| [:space:] 空格 | [:space:] | [:space:] | [:space:] | [:space:] | [:space:] | [:space:] | 不支持 |
| [:upper:] 大写字母 | [:upper:] | [:upper:] | [:upper:] | [:upper:] | [:upper:] | [:upper:] | 不支持 |
| [:xdigit:] 16进制数字 | [:xdigit:] | [:xdigit:] | [:xdigit:] | [:xdigit:] | [:xdigit:] | [:xdigit:] | 不支持 |
| [:return:] |
不支持 | 不支持 | 不支持 | 不支持 | 不支持 | [:return:] | 不支持 |
| [:tab:] |
不支持 | 不支持 | 不支持 | 不支持 | 不支持 | [:tab:] | 不支持 |
| [:escape:] |
不支持 | 不支持 | 不支持 | 不支持 | 不支持 | [:escape:] | 不支持 |
| [:backspace:] |
不支持 | 不支持 | 不支持 | 不支持 | 不支持 | [:backspace:] | 不支持 |