帮助正则表达式

时间:2009-12-20 01:23:07

标签: php search full-text-search

是否可以获得一个正则表达式:

  1. 在字符串
  2. 中找到某些单词的第一次出现
  3. 在出现之前和之后返回nr个字母的子字符串
  4. 但是如果它遇到了。 (点)在出现之前和之后的字母nr之前,它将返回点之前/之后的子字符串。
  5. 返回整个单词
  6. 示例:

    “任何知道如何操作的人。创建一个输入正则表达式并输出满足该正则表达式的字符串的程序。并且bla bla”

    如果关键字是'program'并且我们将nr个字母放到20,它将在'program'之前和之后返回20个字母。但是因为它在达到20个字母之前会遇到一个点,所以它会停在那里。

    “创建一个输入常规...的程序”

    这是否可以使用regexp?我必须使用什么PHP功能?这有什么完成的脚本吗?我认为在显示搜索结果时这是一个非常基本的需求。有人已经有了分享的功能吗?

2 个答案:

答案 0 :(得分:1)

这是Dav在php中的正则表达式:

<?php
  $str = "Anyone who knows how to do this. Create a program that inputs a regular expression and outputs strings that satisfy that regular expression. And bla bla";
  $key = "program";
  $lim = 20;
  $reg = "/([^.]{0,{$lim}})({$key})([^.]{0,{$lim}})/"; // /[^.]{0,20}program[^.]{0,20}/

  $res = preg_match($reg, $str, $matches);
  echo $matches[0];

  print_r($matches); // $matches[1] is the pre-text, and $matches[3] is the post-text

最棘手的要求是#4:“返回整个单词”。你仍然可以使用上面的正则表达式来处理这个问题的一种方法是在你想要之前和之后拉出更多文本(例如40个字符)。然后你可以preg_split在空格上的前后文本,这将给你两个单词数组。通过一个函数运行数组,该函数返回数组的子集,其中所有单词的总长度小于20的限制...

答案 1 :(得分:0)

[^.]{0,MAXCHARS}wordtofind[^.]{0,MAXCHARS}

将MAXCHARS替换为与每侧所需的最大字符数相对应的数字。

[^.]模式匹配任何不是句点的字符,{0,MAXCHARS}限定符匹配这些字符的0到MAXCHARS之间的任何位置。