2009-12-20 107 views
1

是有可能得到的正则表达式做:帮助,正则表达式

  1. 找到一些字第一次出现在一个字符串
  2. 回报字母NR的之前和之后的一个子发生
  3. 但如果它遇到一个。 (点)在出现之前和之后的字母nr之前,它只会返回点之前/之后的子字符串。
  4. 返回整个单词

例如:

“谁知道如何做到这一点创建输入满足,经常表达和BLA BLA正则表达式和输出字符串的程序。”

如果关键字是'程序',并且我们将字母数字设置为20,它将在'程序'之前和之后返回20个字母。但是因为它在达到20个字母之前遇到了一个点,所以它会在那里停下来。

“创建输入一个普通程序......”

这可能与正则表达式?我必须使用哪些php函数?有没有任何finnished脚本?显示搜索结果时,我想它是一个非常基本的需求。有人已经有了分享的功能?

回答

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个字符)。那么你可以在前后文字空白处,这会给你两个单词数组。通过一个函数运行数组,该函数返回数组的一个子集,其中所有单词的总长度都小于20的限制...

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

将MAXCHARS替换为对应于每边所需的最大字符数的数字。

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

+0

它表示未知修饰符'{'。 不应该逃脱。 ?我应该使用preg_match吗? – ajsie 2009-12-20 02:13:29

+0

你真的用数字代替了MAXCHARS吗? '.'不需要被转义,因为它在一个字符类定义('[]'内部)中。你应该能够使用你选择的正则表达式匹配功能;如果它是perl兼容的,比如'preg_match',你需要在正则表达式中加上分隔符,比如'/ regexhere /'。 – Amber 2009-12-20 03:29:01