我主要从事于使用Java桌面应用程序,访问Oracle数据库的工作已经有5年了,但我从未使用过正则表达式。现在我进入Stack Overflow并看到很多关于它们的问题,感觉自己错过了什么东西。
你们是用正则表达式做什么的?
P.S. 对不起,我的英语不好。
我主要从事于使用Java桌面应用程序,访问Oracle数据库的工作已经有5年了,但我从未使用过正则表达式。现在我进入Stack Overflow并看到很多关于它们的问题,感觉自己错过了什么东西。
你们是用正则表达式做什么的?
P.S. 对不起,我的英语不好。
/(bb|[^b]{2})/i
口语中可以读作 "2 be or not 2 be"。
第一部分是括号,由管道符 | 分隔,它表示或语句,因此 (a|b) 匹配 "a" 或 "b"。 管道的前半部分匹配 "bb"。 第二部分的名称不知道,但它是方括号,它们匹配任何不是 "b" 的字符,这就是为什么那里有一个小尖屋顶符号(技术术语)。 波浪括号匹配它们之前的内容计数,本例中是两个不是 "b" 的字符。
第二个斜杠后是一个“i”,它使其不区分大小写。 开始和结束斜杠的使用取决于环境,有时需要使用,有时不需要。
我认为你会发现下面两个链接对你很有用:
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]
在这里,正则表达式中的括号标记一个捕获组,因此您可以看到您匹配的数据是什么,以便进行进一步处理。
这只是冰山一角...在正则表达式中,有许多不同的事情可以做,使文本处理变得非常容易。
最酷的正则表达式 曾经:
/^1?$|^(11+?)\1+$/
这个代码测试一个数字是否是质数。并且它能够正常工作!
注意:为了使其正常工作,需要进行一些设置;我们要测试的数字必须先转换成一个由“1
”组成的字符串,然后我们才能应用表达式来测试该字符串是否不包含质数个“1
”:
def is_prime(n)
str = "1" * n
return str !~ /^1?$|^(11+?)\1+$/
end
在Avinash Meetoo的博客中有一篇详细而易于理解的关于正则表达式检查素数的解释。
验证强密码:
此代码将验证长度为5到10个字母数字字符的密码,其中至少包含一个大写字母、一个小写字母和一个数字:
^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9]{5,10}$
*.txt
以在文件管理器中查找所有文本文件。相应的正则表达式是.*\.txt$
。正如您所知,Oracle现在拥有正则表达式:http://www.oracle.com/technology/oramag/webcolumns/2003/techarticles/rischert_regexp_pt1.html。我已经在一些查询中使用了新功能,但它在其他情况下并不像其他情况那样有用。我认为原因是正则表达式最适合查找嵌入在非结构化数据中的结构化数据。
例如,我可能会使用正则表达式来查找存储在日志文件中的Oracle消息。无法知道消息的位置-只能知道它们的外观。因此,正则表达式是解决该问题的最佳方案。当您使用关系型数据库时,数据通常是预先结构化的,因此正则表达式在这种情况下并不突出。
这些正则表达式是针对Visual Studio和C++特定的,但我有时会发现它们很有用:
查找所有传递了非默认参数的“routineName”的出现次数:
routineName\(:a+\)
相反,要查找所有仅使用默认值的“routineName”出现次数: routineName\(\)
要查找在调试构建中启用(或禁用)的代码:
\#if._DEBUG*
请注意,这将捕获所有的变体:ifdef,if defined,ifndef,if!defined。