Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 什么是好的正则表达式?_Regex - Fatal编程技术网

Regex 什么是好的正则表达式?

Regex 什么是好的正则表达式?,regex,Regex,我已经工作了5年,主要是在java桌面应用程序中访问Oracle数据库,我从未使用过正则表达式。现在我进入Stack Overflow,我看到了很多关于它们的问题;我觉得我错过了什么 你用正则表达式做什么 对不起,我的英语不好 正则表达式(简称regex或regexp)是用于描述搜索模式的特殊文本字符串。您可以将正则表达式视为类固醇上的通配符。您可能熟悉通配符符号,例如*.txt,以便在文件管理器中查找所有文本文件。regex等价物是*\.txt$ 正则表达式的一个很好的资源:正则表达式(或正则

我已经工作了5年,主要是在java桌面应用程序中访问Oracle数据库,我从未使用过正则表达式。现在我进入Stack Overflow,我看到了很多关于它们的问题;我觉得我错过了什么

你用正则表达式做什么

对不起,我的英语不好

正则表达式(简称regex或regexp)是用于描述搜索模式的特殊文本字符串。您可以将正则表达式视为类固醇上的通配符。您可能熟悉通配符符号,例如
*.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}$