Regex 什么是好的正则表达式?
我已经工作了5年,主要是在java桌面应用程序中访问Oracle数据库,我从未使用过正则表达式。现在我进入Stack Overflow,我看到了很多关于它们的问题;我觉得我错过了什么 你用正则表达式做什么 对不起,我的英语不好 正则表达式(简称regex或regexp)是用于描述搜索模式的特殊文本字符串。您可以将正则表达式视为类固醇上的通配符。您可能熟悉通配符符号,例如Regex 什么是好的正则表达式?,regex,Regex,我已经工作了5年,主要是在java桌面应用程序中访问Oracle数据库,我从未使用过正则表达式。现在我进入Stack Overflow,我看到了很多关于它们的问题;我觉得我错过了什么 你用正则表达式做什么 对不起,我的英语不好 正则表达式(简称regex或regexp)是用于描述搜索模式的特殊文本字符串。您可以将正则表达式视为类固醇上的通配符。您可能熟悉通配符符号,例如*.txt,以便在文件管理器中查找所有文本文件。regex等价物是*\.txt$ 正则表达式的一个很好的资源:正则表达式(或正则
*.txt
,以便在文件管理器中查找所有文本文件。regex等价物是*\.txt$
正则表达式的一个很好的资源:正则表达式(或正则表达式)用于字符串中的模式匹配。因此,您可以从一段文本中提取所有电子邮件地址,因为它遵循特定的模式
在某些情况下,正则表达式用正斜杠括起来,并在第二个斜杠后放置不区分大小写等选项。这里有一个很好的例子:)
口语可以读作“2是或不是2是”
第一部分是(括号),它们由管道字符分割,管道字符等同于or语句,因此(a | b)匹配“a”或“b”。管道区域的前半部分与“bb”匹配。下半场的名字我不知道,但它是方括号,它们匹配的是而不是“b”,这就是为什么那里有一个屋顶符号thingie(技术术语)。弯曲的括号与前面的内容计数相匹配,在本例中,两个字符不是“b”
第二个/后面是一个“i”,不区分大小写。开始斜杠和结束斜杠的使用是特定于环境的,有时使用,有时不使用
两个链接,我想你会发现这是方便的
考虑Ruby中的一个示例:
puts "Matched!" unless /\d{3}-\d{4}/.match("555-1234").nil?
puts "Didn't match!" if /\d{3}-\d{4}/.match("Not phone number").nil?
“/\d{3}-\d{4}/”是正则表达式,正如您所见,它是在字符串中查找匹配项的一种非常简洁的方法
此外,使用组可以提取信息,例如:
match = /([^@]*)@(.*)/.match("myaddress@domain.com")
name = match[1]
domain = match[2]
在这里,正则表达式中的括号标记了一个捕获组,因此您可以准确地看到匹配的数据,以便进行进一步的处理
这只是冰山一角。。。在正则表达式中可以做很多不同的事情,使文本处理变得非常简单。如果您刚开始使用正则表达式,我衷心推荐一种类似Regex Coach的工具: 还听到了关于RegexBuddy的好消息:
您可能知道,Oracle现在有正则表达式:。我已经在一些查询中使用了新功能,但它没有在其他上下文中那么有用。我认为,原因是正则表达式最适合查找隐藏在非结构化数据中的结构化数据
例如,我可能使用正则表达式来查找填充在日志文件中的Oracle消息。不可能知道消息在哪里——只能知道它们的样子。所以正则表达式是解决这个问题的最好方法。当您使用关系数据库时,数据通常是预结构化的,因此正则表达式在该上下文中不起作用。如果您想了解正则表达式,我建议。它从最基本的概念开始,一直到讨论不同发动机的工作原理。最后4章还专门介绍了PHP、.Net、Perl和Java。我从中学到了很多,并且仍然把它作为参考 有史以来最酷的正则表达式: 它测试一个数字是否为素数。而且很有效 注意:为了让它工作,需要一些设置;我们要测试的数字必须首先转换为一个“
1
”的字符串,然后如果该字符串不包含“1
”的素数,我们可以应用表达式进行测试:
def is_prime(n)
str = "1" * n
return str !~ /^1?$|^(11+?)\1+$/
end
<>对.< /p> < p>有一个详细的、很容易理解的解释:这些RE是VisualStudio和C++的专用工具,但我发现它们有时是有用的: 查找传递了非默认参数的所有“routineName”: routineName\(:a+\) 相反,要查找所有出现的“routineName”且仅使用默认值,请执行以下操作: routineName\(\) 要查找调试生成中启用(或禁用)的代码,请执行以下操作: \#如果.\u调试*
注意,这将捕获所有变量:ifdef、if定义、ifndef、if!已定义验证强密码: 此密码将验证长度为5到10个字母数字字符的密码,至少有一个大写、一个小写和一个数字:
^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9]{5,10}$
这是一个很好的描述,但迈克的真实例子比双关语“2b”更可取。最好将两者结合起来。
squiggly
关于2
的括号并不常见,它们是curly
。这很聪明,但不适合初学者使用:)@科帕斯:它绝对有效。你读过我链接的操作指南和说明了吗?别忘了读java.util.regex.Pattern的Javadocs。这是一个很好的参考。阿尔索
def is_prime(n)
str = "1" * n
return str !~ /^1?$|^(11+?)\1+$/
end
^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9]{5,10}$