正则表达式找到两个字符串中的任何地方输入

我怎样写一个正则表达式匹配给定的两个字符串,在字符串中的任何位置?

举例来说,如果我寻找catmat ,它应该匹配:

The cat slept on the mat in front of the fire. At 5:00 pm, I found the cat scratching the wool off the mat.

不管是什么之前这些字符串。

--------------解决方案-------------

/^.*?\bcat\b.*?\bmat\b.*?$/m

使用m修饰符(保证上线的开始/结束的元字符匹配断点,而不是在开始和结束的字符串):

  • ^开头的行相匹配
  • .*?匹配上线之前,什么...
  • \b匹配边界的字边界中首次 ​​出现的单词(如@codaddict讨论)
  • 那么该字符串cat和其它字边界; 注意,下划线被视为“字”字,所以_cat_ 匹配。*;
  • .*?任何字符之前...
  • 边界, mat ,边界
  • .*?任何其余字符前...
  • $线路的末端。

使用重要的是\b确保指定的话是不是不再言语一部分,重要的是要使用非贪婪通配符.*?对贪婪的.*因为后者将无法对字符串,如“有其上是猫下垫的顶部上的猫“。 (这将匹配的“猫”,而不是所述第一最后一次出现)。

*如果您希望能够匹配_cat_你可以使用:

/^.*?(?:\b|_)cat(?:\b|_).*?(?:\b|_)mat(?:\b|_).*?$/m

匹配各地指定的单词或者下划线或字的边界(?:)表示非捕获组,它可以帮助性能或避免冲突捕获。

编辑:有一个问题是在有关解决方案是否将工作的短语,而不是空谈的意见中提出。 答案是,绝对肯定的。 下面将匹配“A线,既包括第一阶段和第二阶段”:

/^.*?(?:\b|_)first phrase here(?:\b|_).*?(?:\b|_)second phrase here(?:\b|_).*?$/m

编辑2:如果为了不要紧,你可以使用:

/^.*?(?:\b|_)(first(?:\b|_).*?(?:\b|_)second|second(?:\b|_).*?(?:\b|_)first)(?:\b|_).*?$/m

如果性能是真的在这里的一个问题,它可能环视(如果你的正则表达式引擎支持的话)可能(但可能不会)执行比上面好,但我会离开这两个可以说是更复杂的环视版本,性能测试,一个练习提问/读卡器。

每@Alan穆尔的评论编辑。 我没有机会测试它,但我相信你的话。

(.* word1.* word2.* )|(.* word2.* word1.*)

你可以试试:

\bcat\b.*\bmat\b

\b一个锚,并匹配一个单词边界 。 它会查找单词猫垫子下面的任何地方猫的字符串垫研究。 它不会匹配:

Therez caterpillar on the mat

但将匹配

The cat slept on the mat in front of the fire

如果你想匹配具有信件猫其次是垫的字符串,你可以试试:

cat.*mat

这将匹配上述两个例子字符串。

你没有使用正则表达式。 在你喜欢的语言,分裂的空间,走在分裂的话,检查猫垫。 例如,在Python

>>> for line in open("file"):
... g=0;f=0
... s = line.split()
... for item in s:
... if item =="cat": f=1
... if item =="mat": g=1
... if (g,f)==(1,1): print "found: " ,line.rstrip()

found: The cat slept on the mat in front of the fire.
found: At 5:00 pm, I found the cat scratching the wool off the mat.

这适用于搜索同时包含字符串1和字符串的文件

(((。| \ n))字符串1((。| \ n))的字符串2)|(((。| \ n))字符串2((。| \ n))的字符串1)

匹配后跟任意数量后跟String2的字符或行字段的任意数量后跟字符串1个字符或行领域的匹配或后面加String1中任意数目的字符或行字段的任意数量后跟String2的字符或行领域

这是处理所需的功率相当容易:

(string1(.|\n)*string2)|(string2(.|\n)*string1)

我用这个在Visual Studio 2013的发现,同时有串1和2中的所有文件。

分类:正则表达式 时间:2015-03-15 人气:1
本文关键词: 正则表达式,字符串
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.379 (s). 10 q(s)