惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Microsoft Azure Blog
Microsoft Azure Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Webroot Blog
Webroot Blog
腾讯CDC
The Last Watchdog
The Last Watchdog
博客园 - 司徒正美
H
Hacker News: Front Page
I
InfoQ
A
Arctic Wolf
H
Hackread – Cybersecurity News, Data Breaches, AI and More
H
Heimdal Security Blog
L
LINUX DO - 最新话题
T
Threat Research - Cisco Blogs
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
Security Latest
Security Latest
D
DataBreaches.Net
C
Check Point Blog
J
Java Code Geeks
www.infosecurity-magazine.com
www.infosecurity-magazine.com
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Attack and Defense Labs
Attack and Defense Labs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
L
Lohrmann on Cybersecurity
雷峰网
雷峰网
Vercel News
Vercel News
WordPress大学
WordPress大学
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Spread Privacy
Spread Privacy
Forbes - Security
Forbes - Security
阮一峰的网络日志
阮一峰的网络日志
Hacker News: Ask HN
Hacker News: Ask HN
大猫的无限游戏
大猫的无限游戏
I
Intezer
N
News and Events Feed by Topic
小众软件
小众软件
B
Blog RSS Feed
Help Net Security
Help Net Security
Google DeepMind News
Google DeepMind News
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 三生石上(FineUI控件)
S
Security @ Cisco Blogs
美团技术团队
Recent Announcements
Recent Announcements
Martin Fowler
Martin Fowler
Engineering at Meta
Engineering at Meta
The GitHub Blog
The GitHub Blog
MyScale Blog
MyScale Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main

博客园 - 台风

让员工学会学习 - 台风 - 博客园 我们需要个性突出的员工吗? 为什么不提供离线Blog管理工具呢? 收集积累员工的技能数据和项目经验数据很重要 Web程序中要注意的安全问题 - 台风 - 博客园 如何对Web Application进行安全性评估 项目管理中的组织结构 Migration项目总结 Auditor and Audit Stakeholder Anaylysis 项目的沟通管理 风险的应对策略 项目管理技能 维护项目阶段总结 Six sigma tools 持续过程改进 - 公司过程能力持续提高的保证 对PMR, PM and audit的一些想法 Variables Control Charts (计量值控制图) Attribute Control Charts(计数值控制图)
规则表达式(笔记) - 台风 - 博客园
台风 · 2005-09-02 · via 博客园 - 台风

 规则表达式提供了这样一种机制, 我们可以用来从字符串中匹配特定字符串. 如今规则表达式已经是一个ISO标准.

规则表达式是一种内容无关的语法. 下面来解释它的一些基本操作符.

1. 字符匹配操作符
.  匹配任何一个字符. 如".ord"可以匹配"lord", "cord", "2ord"等等.
[] 匹配任何一个在中括弧中列出的字符. 如"[a-z]ord"可以匹配"aord", "bord", "ford"等等.
 如果在[]中使用-,就表示某个范围, 其前后两个字符号是范围的边界.
[^] 匹配任何一个不在中括弧中列出的字符. 如"[ab]ord"可以匹配"cord", "dord", 但不能匹配"aord", "bord".
 
2. 重复操作符
? 匹配任何字符一次,如果这个字符号存在的话. 如"?erd"可以匹配"erd","aerd","berd"等等.
* 匹配声明的字符零到多次. 如“n.*rd” 可以匹配“nerd”, “nrd”, “neard”等等.
+ 匹配声明的字符至少一次. 如“[n]+erd” 可以匹配“nerd”, “nnerd”,但不能匹配“erd”.
{n} 匹配声明的字符n次. 如“[a-z]{2}erd” 可以匹配“cherd”, “blerd”, etc. but not “nerd”, “erd”, “buzzerd”.
{n,} 匹配声明的字符至少n次. 如“.{2,}erd” 可以匹配“cherd” and “buzzerd”, 但不能匹配“nerd”.
{n,m} 匹配声明的字符n到m次. 如“n[e]{1,2}rd” 可以匹配“nerd” and “neerd”.

3. 定位操作符
^ 一行的开始位置
$ 一行的结束位置
\< 某个单词的开始位置
\> 某个单词的结束位置
\b 某个单词的开始位置 或者 结束位置
\B 某个单词的中间位置

4. 组合操作符
() 表示()内是几个规则表达式的组合. 如“([a]|[]b)erd"匹配"aerd","berd".

交替操作符
| 匹配|前后两组规则表达式. 如“([a]|[]b)erd"匹配"aerd","berd".

保留字
以下这些字符在规则表达式语法中是有特殊意义的字符,不能被直接当字符来使用. 这些字符被称为保留字.
^ (carat)
. (period)
[ (left bracket} 
] (right bracket}
$ (dollar sign)
( (left parenthesis)
) (right parenthesis)
| (pipe)
* (asterisk)
+ (plus symbol)
? (question mark)
{ (left curly bracket, or left brace)
} (right curly bracket, or right brace)
\ backslash
如果想使用保留字作为实际字符来使用,需要在该保留字前面加反斜线blackslash(\)

在一些unix工具中,一般用正斜杠slash(/)包围所描述的规则表达式,如[A-Z]+(abc|xyz)*/
某些规则表达式工具或某些语言中还定义了一些转义的字符,比如\w 代表空白字符,\d 代表数字,就相当于定义了[ ]和[0-9]的快捷方式. 当使用具体大工具或语言的规则表达式时,要去了解这些特定的定义.

下面以Java中规则表达式为例, 演示如何在Java中使用规则表达式.
1. 匹配字符串是否 
    Pattern.mateches("[[0-9]{2}","00");  #return true
    Pattern.mateches("[[0-9]{2}","a00");  #return false
    Pattern.mateches("[[a-z0-9]*","a00");  #return true