常用表达GydF4y2Ba
建议读者使用这个GydF4y2Ba应用程序GydF4y2Ba为了获得我们在这个Wiki中谈论的内容,直到他学会通过自己进行编程。GydF4y2Ba
正则表达式(缩写Regex)是最有用的工具GydF4y2Ba细绳GydF4y2Ba加工。如果你喜欢这个GydF4y2Ba搜索和替换GydF4y2Ba在你最喜欢的文本编辑器/文字处理器中,你会喜欢这个工具的。GydF4y2Ba
内容GydF4y2Ba
介绍GydF4y2Ba
正则表达式最初是一个借来的一词GydF4y2Ba自动机理论GydF4y2Ba在理论计算机科学中。广泛地,它是指GydF4y2Ba图案GydF4y2Ba子字符串需要与之匹配的。GydF4y2Ba
漫画应该已经给你一个关于正则表达式对的想法。许多编程语言,文本处理工具,数据验证工具和搜索引擎不应该令人惊讶地令人惊讶地利用它们。GydF4y2Ba
关键的想法是,正则表达式是一种模式GydF4y2Ba火柴GydF4y2Ba一组目标字符串。GydF4y2Ba
\ w + @ \ w + \。(com | org | net | in)GydF4y2Ba
是一个正则表达式,它匹配以GydF4y2Ba.comGydF4y2Ba
那GydF4y2Ba。网GydF4y2Ba
那GydF4y2Ba.orgGydF4y2Ba
或者GydF4y2Ba在里面GydF4y2Ba
。GydF4y2Ba
概念GydF4y2Ba
正则表达式语法有多种形式,随语言而异。在这里,我们将检查perl正则表达式,因为大多数其他正则表达式通常都是它的变体。GydF4y2Ba
在深入研究语法之前,模式包括以下几类内容:GydF4y2Ba
文字:GydF4y2Ba它们是最简单的匹配的东西。当他们在那里时,我们就匹配它们。它可能就像一个GydF4y2Ba
一种GydF4y2Ba
或者GydF4y2Ba1GydF4y2Ba
。GydF4y2Ba元字符:GydF4y2Ba他们并不意味着它们的样子。他们通常会提到别的东西。例如,GydF4y2Ba
\dGydF4y2Ba
可以参考任何数字。GydF4y2Ba垂直栏:GydF4y2Ba这GydF4y2Ba
|GydF4y2Ba
是布尔的象征或。它可以选择匹配它限制的任何内容。GydF4y2Ba量词:GydF4y2Ba他们指定需要匹配多少有关模式。GydF4y2Ba
分组和捕获:GydF4y2Ba括号可用于对正则表达式的部分进行分组或捕获部分以供以后使用。GydF4y2Ba
句法GydF4y2Ba
让我们更详细地了解一下元字符的作用。GydF4y2Ba
元字符GydF4y2Ba | 描述GydF4y2Ba |
^GydF4y2Ba |
stringGydF4y2Ba |
$GydF4y2Ba |
串GydF4y2Ba |
\tGydF4y2Ba |
标签GydF4y2Ba |
\nGydF4y2Ba |
新队GydF4y2Ba |
\rGydF4y2Ba |
回车GydF4y2Ba |
\GydF4y2Ba |
任何空白字符GydF4y2Ba |
S.GydF4y2Ba |
任何非空白字符GydF4y2Ba |
\dGydF4y2Ba |
任何数字GydF4y2Ba |
D.GydF4y2Ba |
任何非数字GydF4y2Ba |
\wGydF4y2Ba |
任何词字符GydF4y2Ba |
W.GydF4y2Ba |
任何非单词字符GydF4y2Ba |
\bGydF4y2Ba |
任何词边界GydF4y2Ba |
\ B.GydF4y2Ba |
任何非词汇边界GydF4y2Ba |
。GydF4y2Ba |
任何单一的字符,通常都禁止换行符GydF4y2Ba |
顺便问一下,如果你想明确匹配元件,你需要使用GydF4y2Ba\GydF4y2Ba
逃脱它。例如,GydF4y2Ba\。GydF4y2Ba
正好和GydF4y2Ba。GydF4y2Ba
特点。GydF4y2Ba
现在,让我们看看更具灵活性的东西。GydF4y2Ba
表达GydF4y2Ba | 意义GydF4y2Ba |
[ABC]GydF4y2Ba |
匹配任何一个GydF4y2Ba一种GydF4y2Ba 那GydF4y2BaB.GydF4y2Ba , 或者GydF4y2BaCGydF4y2Ba |
[^ abc]GydF4y2Ba |
匹配以外的任何东西GydF4y2Ba一种GydF4y2Ba 那GydF4y2BaB.GydF4y2Ba , 或者GydF4y2BaCGydF4y2Ba |
[广告]GydF4y2Ba |
匹配范围中的任何字符GydF4y2Baa-dGydF4y2Ba |
a*GydF4y2Ba |
火柴GydF4y2Ba一种GydF4y2Ba 零或更多次GydF4y2Ba |
A.GydF4y2Ba |
火柴GydF4y2Ba一种GydF4y2Ba 零或一次GydF4y2Ba |
a+GydF4y2Ba |
火柴GydF4y2Ba一种GydF4y2Ba 一次或多次GydF4y2Ba |
a | bGydF4y2Ba |
匹配GydF4y2Ba一种GydF4y2Ba org.ydF4y2BaB.GydF4y2Ba |
一个{3}GydF4y2Ba |
恰好匹配3GydF4y2Ba一种GydF4y2Ba |
一个{3,}GydF4y2Ba |
匹配3或更多GydF4y2Ba一种GydF4y2Ba |
{3,5}GydF4y2Ba |
匹配3,4或5的GydF4y2Ba一种GydF4y2Ba (包括范围)GydF4y2Ba |
()GydF4y2Ba |
捕捉到括号内的一切GydF4y2Ba |
我们现在准备解释原因GydF4y2Ba
\ w + @ \ w + \。(com | org | net | in)GydF4y2Ba
是否索赔。GydF4y2Ba首先,电子邮件应该是什么样的?那是对的,它应该有一个像这样的结构GydF4y2Ba
user@domain.extension.GydF4y2Ba
。GydF4y2Ba这GydF4y2Ba
用户GydF4y2Ba
和GydF4y2Ba领域GydF4y2Ba
由任何字母,数字或下划线组成,但至少是其中一个。所以,我们使用GydF4y2Ba\w+GydF4y2Ba
。GydF4y2Ba我们限制了这一点GydF4y2Ba
延期GydF4y2Ba
到GydF4y2Baorg.GydF4y2Ba
那GydF4y2Ba通用域名格式GydF4y2Ba
那GydF4y2Ba网GydF4y2Ba
org.ydF4y2Ba在GydF4y2Ba
通过使用GydF4y2Ba|GydF4y2Ba
。GydF4y2Ba
优秀的员工有类似的电子邮件calvin@www.parkandroid.com或support@www.parkandroid.com,即单个字母数字单词(有时带有下划线或句点)或名称后跟站点地址。GydF4y2Ba
Kenji希望建立一个只有辉煌员工可以使用的应用程序。以下哪一项regex是最好的使用?GydF4y2Ba
.@brilliant\.orgGydF4y2Ba
\w+@brilliant\.orgGydF4y2Ba
\ w t+@billiant.org.GydF4y2Ba
\ w * @ bright \ .orgGydF4y2Ba
。+ @ stright \ .orgGydF4y2Ba
行动中的正则表达式 - Perl实现GydF4y2Ba
Perl是最着名的语言,因为充分理由使用正则表达式。GydF4y2Ba
我们使用GydF4y2Ba=~GydF4y2Ba
根据上下文,操作员表示匹配或分配。指某东西的用途GydF4y2Ba!〜GydF4y2Ba
是扭转比赛的感觉。GydF4y2Ba
Perl基本上有两种正则表达式运算符:GydF4y2Ba
- 匹配:GydF4y2Ba
M //GydF4y2Ba
- 代换:GydF4y2Ba
S ///GydF4y2Ba
的目的是GydF4y2Ba//GydF4y2Ba
是附上正则表达式。但是,任何其他分隔师都喜欢GydF4y2Ba{}GydF4y2Ba
那GydF4y2Ba“GydF4y2Ba
等等可以使用。GydF4y2Ba
匹配GydF4y2Ba
要使用匹配的操作员,我们只需检查双方使用GydF4y2Ba=~GydF4y2Ba
和GydF4y2BaM //GydF4y2Ba
操作员。GydF4y2Ba
以下集合GydF4y2Ba
$trueGydF4y2Ba
如果才有1,只有GydF4y2Ba$ fooGydF4y2Ba
匹配正则表达式GydF4y2BaFooGydF4y2Ba
:GydF4y2Ba
1GydF4y2Ba$trueGydF4y2Ba=GydF4y2Ba(GydF4y2Ba$ fooGydF4y2Ba=~GydF4y2Bam / foo /GydF4y2Ba);GydF4y2Ba
不难看出,与此相反的是GydF4y2Ba
!〜GydF4y2Ba
:GydF4y2Ba
1GydF4y2Ba$ false.GydF4y2Ba=GydF4y2Ba(GydF4y2Ba$ fooGydF4y2Ba!〜GydF4y2Bam / foo /GydF4y2Ba);GydF4y2Ba
捕获GydF4y2Ba
正如承诺,GydF4y2Ba()GydF4y2Ba
可用于捕获正方形的部分。当括号内的模式匹配时,它们会进入特殊的变量GydF4y2Ba1美元GydF4y2Ba
那GydF4y2Ba2美元GydF4y2Ba
等等。GydF4y2Ba
以下是如何提取时间串的小时,分钟,秒数:GydF4y2Ba
1 2 3 4 5GydF4y2Ba如果GydF4y2Ba(GydF4y2Ba$时间GydF4y2Ba=~GydF4y2Ba/(\ d \ d):( \ d \ d):( \ d \ d)/GydF4y2Ba)GydF4y2Ba{GydF4y2Ba#匹配hh:mm:ss格式GydF4y2Ba$ HOWEGydF4y2Ba=GydF4y2Ba1美元GydF4y2Ba;GydF4y2Ba$分钟GydF4y2Ba=GydF4y2Ba2美元GydF4y2Ba;GydF4y2Ba$秒GydF4y2Ba=GydF4y2Ba3美元GydF4y2Ba;GydF4y2Ba}GydF4y2Ba
在列表上下文中,列表GydF4y2Ba($1, $2, $3, .. )GydF4y2Ba
将被退回。GydF4y2Ba
更简单的方式是这样做的GydF4y2Ba
1GydF4y2Ba我的GydF4y2Ba(GydF4y2Ba$ HOWEGydF4y2Ba那GydF4y2Ba$分钟GydF4y2Ba那GydF4y2Ba$秒GydF4y2Ba)GydF4y2Ba=GydF4y2Ba(GydF4y2Ba$时间GydF4y2Ba=~GydF4y2Bam /(\ d +):(\ D +):( \ D +)/GydF4y2Ba);GydF4y2Ba
代换GydF4y2Ba
这是我们最喜欢的搜索和替换功能。几乎相同的语法规则在此处应用于第二个之间存在额外条款GydF4y2Ba//GydF4y2Ba
这告诉我们应该匹配什么。GydF4y2Ba
这是一个自我解释的代码:GydF4y2Ba
1 2 3 4 5 6 7 8GydF4y2Ba$ X.GydF4y2Ba=GydF4y2Ba“喂猫的时候了!”GydF4y2Ba;GydF4y2Ba$ X.GydF4y2Ba=~GydF4y2BaS / CAT /黑客/GydF4y2Ba;GydF4y2Ba#$ x包含“喂回黑客的时间!”GydF4y2Ba如果GydF4y2Ba(GydF4y2Ba$ X.GydF4y2Ba=~GydF4y2Bas / ^(时间。*黑客)!$ / $ 1现在!/GydF4y2Ba)GydF4y2Ba{GydF4y2Ba$more_坚持GydF4y2Ba=GydF4y2Ba1GydF4y2Ba;GydF4y2Ba}GydF4y2Ba$ y.GydF4y2Ba=GydF4y2Ba“”引用“”GydF4y2Ba;GydF4y2Ba$ y.GydF4y2Ba=~GydF4y2Bas / ^(.*)''''/ 0.1 /GydF4y2Ba;GydF4y2Ba#剥离单引号,GydF4y2Ba#$ y包含“引用单词”GydF4y2Ba
修饰符GydF4y2Ba
修饰符可以附加到正则表达式的末尾,以修改其匹配行为。GydF4y2Ba
以下是一些重要修改者的列表:GydF4y2Ba
修饰语GydF4y2Ba | 描述GydF4y2Ba |
一世GydF4y2Ba |
案例不敏感匹配GydF4y2Ba |
S.GydF4y2Ba |
允许使用GydF4y2Ba。GydF4y2Ba 匹配纽单GydF4y2Ba |
XGydF4y2Ba |
为了清晰起见,允许在正则表达式中使用空格GydF4y2Ba |
GGydF4y2Ba |
在全球范围内找到所有比赛GydF4y2Ba |
这是人们可能想要使用的GydF4y2Ba
GGydF4y2Ba
改性剂:GydF4y2Ba
1 2 3 4 5 6 7GydF4y2Ba$ X.GydF4y2Ba=GydF4y2Ba“我4投4中”GydF4y2Ba;GydF4y2Ba$ X.GydF4y2Ba=~GydF4y2Bas/4/4/gydF4y2Ba;GydF4y2Ba#不做这一切:GydF4y2Ba#$ x包含“我击打四个4”GydF4y2Ba$ X.GydF4y2Ba=GydF4y2Ba“我4投4中”GydF4y2Ba;GydF4y2Ba$ X.GydF4y2Ba=~GydF4y2Bas/4/4/gGydF4y2Ba;GydF4y2Ba#这一切都是:GydF4y2Ba#$ x包含“我四个四个四个”GydF4y2Ba