正则表达式
跳转到导航
跳转到搜索
元字符 {}+() 需要转义。
Perl
参见主条目Perl#正则表达式。
平衡组/嵌套匹配:
将所有匹配的<>替换为空字符串
s/(<(?:[^<>]++|(?1))*>)//g
>>> regex.findall(r'(<(?:[^<>]++|(?1))*>)', '<a>, <b <c>>', overlapped=True)
['<a>', '<b <c>>', '<c>']
对照
单词边界
- GNU sed:(扩展)
\b或\<,\>。\B也支持[1] - BSD / Mac OS X sed:
[[:<:]],[[:>:]][2] - GNU awk:(扩展)
\<,\>。\B也支持,但是不支持\b[3] - GNU grep:(扩展)
\b或\<,\>。\B也支持[4] - Python:
\b - Vim:
\<,\>
常用的正则
IPv4 地址
_ip_re = re.compile(r'(?<!\d)(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d))(?!\d)')
URL
link_re = re.compile(r'''\b(?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\((?:[^\s()<>]+|\([^\s()<>]+\))*\))+(?:\((?:[^\s()<>]+|\([^\s()<>]+\))*\)|[^\s`!()\[\]{};:'".,<>??«»“”‘’])''', re.ASCII | re.I)
注意:此正则可能导致问题。[6]
对于待匹配文本:
https://wiki.archlinux.org/index.php/USB_Installation_Media_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
对于某些正则实现,其括号部分会导致问题。括号中字符越多,问题越严重。
在 Python (3.3, 2.7) 自带正则引擎中,此匹配将消耗大量时间。在 PCRE 中会报错:「超过PCRE 的回溯限制」。
在 Python 的第三方库 mrab-regex 中无此问题。Perl 中无此问题。spidermonkey 提示「InternalError: regular expression too complex」,nodejs 会卡死(并且不接受键盘中断)。
重现此问题的简单示例:
s = '<aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>'
r = re.compile(r'''(?:<(?:[^<>]+)*>)+b''')
r.findall(s)
另一个正则:jmrware - URL Linkification (HTTP/FTP)。
字符类型
比较全的中文字符范围:[7]
[\u3400-\u4DB5\u4E00-\u9FA5\u9FA6-\u9FBB\uF900-\uFA2D\uFA30-\uFA6A\uFA70-\uFAD9\uFF00-\uFFEF\u2E80-\u2EFF\u3000-\u303F\u31C0-\u31EF\u2F00-\u2FDF\u2FF0-\u2FFF\u3100-\u312F\u31A0-\u31BF\u3040-\u309F\u30A0-\u30FF\u31F0-\u31FF\uAC00-\uD7AF\u1100-\u11FF\u3130-\u318F\u4DC0-\u4DFF\uA000-\uA48F\uA490-\uA4CF\u2800-\u28FF\u3200-\u32FF\u3300-\u33FF\u2700-\u27BF\u2600-\u26FF\uFE10-\uFE1F\uFE30-\uFE4F]
地区
非中国大陆的国家和地区(简体中文、前缀匹配):
(阿布哈兹|阿富汗|阿尔巴尼亚|阿尔及利亚|安道尔|安哥拉|安提瓜和巴布达|阿根廷|亚美尼亚|阿尔扎赫|澳大利亚|奥地利|阿塞拜疆|巴哈马|巴林|孟加拉|巴巴多斯|白俄罗斯|比利时|伯利兹|贝宁|不丹|玻利维亚|波斯尼亚和黑塞哥维那|博茨瓦纳|巴西|文莱|保加利亚|布基纳法索|布隆迪|柬埔寨|喀麦隆|加拿大|佛得角|中非|乍得|智利|哥伦比亚|科摩罗|刚果|库克群岛|哥斯达黎加|科特迪瓦|克罗地亚|古巴|塞浦路斯|捷克|丹麦|吉布提|多米尼克|多米尼加|顿涅茨克|厄瓜多尔|埃及|萨尔瓦多|赤道几内亚|厄立特里亚|爱沙尼亚|斯威士兰|埃塞俄比亚|斐济|芬兰|法国|加蓬|冈比亚|格鲁吉亚|德国|加纳|希腊|格林纳达|危地马拉|几内亚|几内亚比绍|圭亚那|海地|洪都拉斯|匈牙利|冰岛|印度|印尼|伊朗|伊拉克|爱尔兰|以色列|意大利|牙买加|日本|约旦|哈萨克斯坦|肯尼亚|基里巴斯|科索沃|科威特|吉尔吉斯斯坦|老挝|拉脱维亚|黎巴嫩|莱索托|利比里亚|利比亚|列支敦士登|立陶宛|卢甘斯克|卢森堡|马达加斯加|马拉维|马来西亚|马尔代夫|马里|马耳他|马绍尔群岛|毛里塔尼亚|毛里求斯|墨西哥|密克罗尼西亚联邦|摩尔多瓦|摩纳哥|蒙古|黑山|摩洛哥|莫桑比克|缅甸|纳米比亚|瑙鲁|尼泊尔|荷兰|新西兰|尼加拉瓜|尼日尔|尼日利亚|纽埃|朝鲜|北塞浦路斯|北马其顿|马其顿|挪威|阿曼|巴基斯坦|帕劳|巴勒斯坦|巴拿马|巴布亚新几内亚|巴拉圭|秘鲁|菲律宾|波兰|葡萄牙|德涅斯特河沿岸|卡塔尔|罗马尼亚|俄罗斯|卢旺达|圣基茨和尼维斯|圣卢西亚|圣文森特和格林纳丁斯|萨摩亚|圣马力诺|圣多美和普林西比|沙特阿拉伯|塞内加尔|塞尔维亚|塞舌尔|塞拉利昂|新加坡|斯洛伐克|斯洛文尼亚|所罗门群岛|索马里|索马里兰|南非|韩国|南奥塞梯|南苏丹|西班牙|斯里兰卡|苏丹|苏里南|瑞典|瑞士|叙利亚|台湾|塔吉克斯坦|坦桑尼亚|泰国|东帝汶|多哥|汤加|特立尼达和多巴哥|突尼斯|土耳其|土库曼斯坦|图瓦卢|乌干达|乌克兰|阿联酋|英国|美国|乌拉圭|乌兹别克斯坦|瓦努阿图|梵蒂冈|委内瑞拉|越南|西撒哈拉|也门|赞比亚|津巴布韦|海外属地与其他特殊政区|海外属地与其他特殊政区|奥兰|美属萨摩亚|安圭拉|阿鲁巴|百慕大|开曼群岛|圣诞岛|科科斯|库拉索|福克兰群岛|法罗群岛|法属波利尼西亚|直布罗陀|格陵兰|关岛|根西|马恩岛|泽西|蒙特塞拉特|新喀里多尼亚|北马里亚纳群岛|皮特凯恩群岛|波多黎各|圣巴泰勒米|圣赫勒拿|圣皮埃尔和密克隆|圣马丁|斯瓦尔巴|托克劳|特克斯和凯科斯群岛|英属维尔京群岛|美属维尔京群岛|瓦利斯和富图纳|留尼汪|荷属圣马丁|琉球|法属圭亚那|法属圣马丁|诺福克岛|瓜德罗普|马提尼克|澳门|中国澳门|香港|中国香港|台湾|中国台湾)
更大的地区(简体中文、前缀匹配):
(非洲|欧洲|亚太地区|东亚|东南亚|东北欧|中东|东南欧|拉美|美洲|日韩|太平洋|南美|南极洲|南亚|北美|北非|中欧)
参见
外部链接
文档与标准
教程
测试
- Rubular: a Ruby regular expression editor and tester
- Regular Expressions 101,带解释,PHP 的 PCRE 语法。
- Debuggex: The online visual regex tester (JavaScript)
- Pythex: a Python regular expression editor
- RegExr: Learn, Build, & Test RegEx (支持 JavaScript 正则和 PCRE)
- Playground | recheck: 检查正则表达式的性能
收集
其它
参考资料
- ↑ Escapes - sed, a stream editor
- ↑ shell - sed whole word search and replace - Stack Overflow
- ↑ GNU Regexp Operators - The GNU Awk User's Guide
- ↑ grep regular expression syntax - Finding Files
- ↑ 修改自 Daring Fireball: An Improved Liberal, Accurate Regex Pattern for Matching URLs
- ↑ Runaway Regular Expressions: Catastrophic Backtracking
- ↑ 关于unicode汉字范围正则的写法 | Chronos