什么是好的正则表达式?
我已经工作了5年,主要工作在访问Oracle数据库的Java桌面应用程序中,并且从未使用过正则表达式。现在,我进入堆栈溢出,我看到很多有关它们的问题。我觉得我错过了一些东西。
我们使用正则表达式做什么?
P.S.对不起,我的英语不好
解决方案
回答
A regular expression (regex or regexp for short) is a special text string for describing a search pattern. You can think of regular expressions as wildcards on steroids. You are probably familiar with wildcard notations such as *.txt to find all text files in a file manager. The regex equivalent is .*\.txt$.
正则表达式的绝佳资源:http://www.regular-expressions.info
回答
正则表达式(或者正则表达式)用于模式化字符串匹配。因此,我们可以从一段文本中提取所有电子邮件地址,因为它遵循特定的模式。
在某些情况下,将正则表达式括在正斜杠中,并在第二个斜杠后放置诸如不区分大小写之类的选项。这是一个很好的:)
/(bb|[^b]{2})/i
口语可以读为" 2 be or 2 be"。
第一部分是(括号),它们由管道分开。等于或者语句的字符,因此(a | b)匹配" a"或者" b"。管道区域的前半部分与" bb"匹配。下半部分的名字我不知道,但它是方括号,它们匹配不是" b"的任何东西,这就是为什么那里有一个屋顶符号的东西(技术术语)的原因。弯曲的方括号与前面的事物匹配,在这种情况下,这两个字符不是" b"。
在第二个/之后是" i",这使其不区分大小写。使用开始和结束斜杠是特定于环境的,有时我们会这样做,有时却不会。
我认为我们可以从中找到的两个链接很方便
- regular-expressions.info
- 维基百科-正则表达式
回答
考虑一下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("[email protected]") name = match[1] domain = match[2]
在这里,正则表达式中的括号标记了一个捕获组,因此我们可以确切地看到匹配的数据是什么,从而可以进行进一步处理。
这只是冰山一角……在正则表达式中我们可以执行许多不同的操作,从而使文本处理变得非常容易。
回答
如果我们只是从正则表达式开始,我衷心推荐一个类似Regex Coach的工具:
http://www.weitz.de/regex-coach/
还听到了有关RegexBuddy的好消息:
http://www.regexbuddy.com/
回答
我们可能知道,Oracle现在具有正则表达式:http://www.oracle.com/technology/oramag/webcolumns/2003/techarticles/rischert_regexp_pt1.html。我在一些查询中使用了新功能,但是它没有在其他情况下有用。我认为,原因在于正则表达式最适合查找隐藏在非结构化数据中的结构化数据。
例如,我可能使用正则表达式来查找填充在日志文件中的Oracle消息。不可能知道消息在哪里,只能知道它们的外观。因此,正则表达式是解决该问题的最佳解决方案。当我们使用关系数据库时,数据通常是预先构建的,因此正则表达式在这种情况下不会发光。
回答
如果我们想了解正则表达式,我建议我们精通正则表达式。从最基本的概念一直一直到谈论不同引擎在下面的工作方式。最后4章还专门介绍了PHP,.Net,Perl和Java。我从中学到了很多,并且仍然将其作为参考。
回答
有史以来最酷的正则表达式:
/^1?$|^(11+?)+$/
它测试数字是否为质数。而且有效!!
N.B .:要使其正常工作,需要进行一些设置;我们要测试的数字必须首先转换为字符串" 1",然后我们可以将表达式应用于测试字符串是否不包含素数" 1":
def is_prime(n) str = "1" * n return str !~ /^1?$|^(11+?)+$/ end
在Avinash Meetoos博客上有一个详细且非常容易理解的解释。
回答
这些RE特定于Visual Studio和C ++,但我发现它们有时会有所帮助:
通过传递的非默认参数查找所有出现的" routineName":
例程名称(:a + )
相反,仅使用默认值查找所有出现的" routineName":
例程名称()
要查找在调试版本中启用(或者禁用)的代码:
\#if._DEBUG *
请注意,这将捕获所有变体:ifdef,如果已定义,ifndef,如果!defined
回答
验证强密码:
此密码将验证密码,密码长度为5到10个字母数字字符,并且至少包含一个大写字母,一个小写字母和一位数字:
^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9]{5,10}$