题
我已经工作了5年,主要是在java桌面应用程序访问Oracle数据库和我从来没有使用常规的表达。现在我的客栈的溢出和我看到了很多有关的问题;我感觉好像我错过了什么。
为什么你使用普通的表情?
P.S.对不起我英语不好
解决方案
考虑一个例子,在红宝石:
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]
在此,括号中经常表达标志着一个拍摄组,这样你可以看看到底是什么的数据是你的匹配,所以你可以做进一步的处理。
这只是冰山一角...有许多许多不同的东西,你可以在一个经常的表达,使得处理文本的真的很容易。
其他提示
Regular Expressions(或Regex)是使用模式匹配在弦。这样你就可以拉出来的所有电子邮件地址从一段文字,因为它遵循一种特定的模式。
在某些情况下经常表达的封闭式在向前斜线和之后的第二斜放的选择,例如情况不敏感性。这里有一个很好的一个:)
/(bb|[^b]{2})/i
说它可以阅读"2够或不2"。
第一部分的(括号中),他们分管的性格,这相当于一个或语句,以便(a|b)匹配"a"或"b"。第一半的管道地区相匹配"bb"。第二一半的名字我不知道但它是在方括号内,它们匹配的任何东西就是 不 "b",这就是为什么还有一个屋顶符号聊天工具(技术术语)。在波浪括号内的匹配数的东西在他们之前,在这种情况下两个字不是"b"。
之后二是"我",这使得这种情况不敏感。使用的开始和结束的斜线是环境的具体的、有时你做的和有时候,你不这样做。
两个链接,我认为你会找到方便用于此
最酷的经常表达 曾经:
/^1?$|^(11+?)\1+$/
它考验如果一个数字是总理。和它的工作原理!!
注:要使它的工作,一位的设立是需要的;数,我们要测试已经被转换成一串"1
"s第一, 然后 我们可以申请表,以测试,如果不符串 不 包含一个质量的"1
"s:
def is_prime(n)
str = "1" * n
return str !~ /^1?$|^(11+?)\1+$/
end
有一个相关详细和非常平易近人解释过 阿维纳什Meetoo的博客.
如果你想了解约定的表达,我建议 Mastering Regular Expressions.它从非常基本的概念,所有的方式谈到如何不同的引擎工作的下方。最后4个章节还给出了一个专门的章节的每一个PHP.净,Perl,并Java。我从中学到了些什么,并仍然使用它作为参考。
因为你可能知道,Oracle现在已经常表达方式: http://www.oracle.com/technology/oramag/webcolumns/2003/techarticles/rischert_regexp_pt1.html.我已经使用了新的功能在几查询,但它还没有被作为有用,因为在其他情况下。因此,我相信,这经常表现是最适合于发现结构化数据埋在非结构化的数据。
例如,我可能会使用regex找到Oracle消息塞在登录文件。它不可能知道的消息--只有他们看起来像什么.所以regex是最好的解决这一问题。当你的工作与关系数据库,该数据通常是前的结构,因此regex不会闪现在该上下文。
一个经常的表达(regex或regexp)是一个特殊的文字符串中描述了一种搜索模式。你可以认为经常表现为通配符的类固醇。你可能熟悉通配符号,比如
*.txt
找到所有文本文件在文件管理。Regex等同的是.*\.txt$
.
一个伟大的资源用于经常表达方式: http://www.regular-expressions.info
这些重的是具体到Visual Studio和C++但我发现他们的帮助在次:
找到的所有出现"routineName"与非默认params通过:
routineName\(:+\)
相反地找出现的所有"routineName"只有默认: routineName\(\)
找到代码启用(或障碍)在调试建立:
\#如果。_DEBUG*
注意,这将捕获的所有变体:ifdef,如果定义,ifndef,如果!定义
验证强密码:
这将验证密码长度为5至10个字母数字符,与至少一个情况下,一个较低的情况下和一个数字:
^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9]{5,10}$