基本的正则表达式帮助

时间:2010-08-23 20:40:41

标签: php regex

$text_expression = 'word1 word2 "phrase 1" "phrase 2" -word3 -word4 -"phrase \"hello\" 3" -"phrase 4"';

我想搜索包含的字符串(word1或word2或'短语1'或'短语2')并且不包含(word3或word4或'短语'hello“3'或'短语4')

什么是正则表达式,相当于上面的$ text_expression?它产生一个像;

的数组

[contains] =>数组(

[0] => word1 
[1] => word2 
[2] => phrase 1 

) [不包含] =>数组(

[0] => word3 
[1] => word4 
[2] => phrase "hello" 3

ps:我可以用另一种方式表达字符串,如果它会使它更容易(例如使用其他字符而不是引号和破折号)

4 个答案:

答案 0 :(得分:3)

如果您坚持使用正则表达式解决方案,则可以使用lookarounds

^(?=.*(want|need|desired))(?!.*(noway|dontwant|nonono)).*$

(?=…) 正面前瞻;它断言给定的模式可以匹配。 (?!…) 否定前瞻;它断言给定模式可以 NOT 匹配。

(this|that|somethingelse)group

alternation

该模式提供以下匹配项(as seen on rubular.com):

  

i want you
  i need you
  <击> nonono i don't want you
  <击> noway noway noway
  <击> i in noway desired you
  you desired me, though

答案 1 :(得分:3)

请找一个好的解析库...这个正则表达式太复杂而无法安全使用(主要是因为字符串转义和转义逃逸)。例如,您可以使用PEG parser

PS。我假设您要解析实际查询$string,而不是产生一个正则表达式,它将按照问题中的描述过滤文本。

答案 2 :(得分:3)

与正则表达式的负匹配是可能的,但非常复杂。也许你想先搜索第一部分,然后用第二部分过滤结果。你“或”正则表达式|,所以先查找“word1 | word2 |短语1 |短语2”,然后删除与“word3 | word4 |短语”hello“3 |短语4”匹配的结果(逃避加入|之前的单词和短语可能是一个好主意。)

答案 3 :(得分:-2)

我可以,而且我愿意,但为了您的利益,我可以谦虚地建议在正则表达式教程中投入2个小时吗?它会很快得到回报。