有什么好的正则表达式?

Tel*_*tar 11 regex

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

你用什么正则表达式?

PS抱歉我的英语不好

Tei*_*ion 7

正则表达式(或正则表达式)用于在字符串中模式匹配.因此,您可以从一段文本中提取所有电子邮件地址,因为它遵循特定模式.

在某些情况下,正则表达式用正斜杠括起来,在第二个斜杠后放置选项,例如不区分大小写.这是一个很好的:)

/(bb|[^b]{2})/i
Run Code Online (Sandbox Code Playgroud)

说它可以读为"2是或不是2".

第一部分是(括号),它们被管道分开 等于或声明的字符,因此(a | b)匹配"a"或"b".管道区域的前半部分与"bb"相匹配.下半场的名字我不知道,但它是方括号,它们匹配任何不是 "b"的东西,这就是为什么那里有屋顶符号的东西(技术术语).波浪形括号与它们之前的事物的数量相匹配,在这种情况下,两个字符不是"b".

在第二个/之后是"i",使其不区分大小写.使用开始和结束斜杠是特定于环境的,有时候你会这样做,有时则不然.

我认为你会发现两个链接很方便

  1. regular-expressions.info
  2. 维基百科 - 正则表达式


Mik*_*one 7

考虑一下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?
Run Code Online (Sandbox Code Playgroud)

"/\d {3} - \d {4} /"是正则表达式,正如您所看到的,它是一种在字符串中查找匹配的非常简洁的方法.

此外,使用组可以提取信息,如下所示:

match = /([^@]*)@(.*)/.match("myaddress@domain.com")
name = match[1]
domain = match[2]
Run Code Online (Sandbox Code Playgroud)

这里,正则表达式中的括号标记了一个捕获组,因此您可以确切地看到匹配的数据是什么,因此您可以进行进一步处理.

这只是冰山一角......你可以在正则表达式中做很多不同的事情,这使得处理文本变得非常简单.


Kon*_*lph 6

有史以来最酷的正则表达:

/^1?$|^(11+?)\1+$/
Run Code Online (Sandbox Code Playgroud)

它测试一个数字是否为素数.它的工作原理!!

注意:要使其工作,需要进行一些设置; 我们要测试的数量必须转换成"串1"的第一个,那么我们可以将表达式来测试如果字符串包含的素数" 1" S:

def is_prime(n)
  str = "1" * n
  return str !~ /^1?$|^(11+?)\1+$/ 
end
Run Code Online (Sandbox Code Playgroud)

Avinash Meetoo的博客上有一个详细而且非常平易近人的解释.

  • 这很聪明,但对初学者来说几乎不合适!:) (2认同)