1
<?php
     $flag=true;
   if(isset($_POST['sub'])){
   if(isset($_POST['text'])){
     $a=$_POST["text"]; 
  } else {
     $a='';
  }
    if(!empty($_POST['msg'])){
      $b=$_POST['msg'];
      $c=strlen($b);}
    if(isset($_POST['wrd'])){
      $d=($_POST["wrd"]);   
    } else {
      $d='';
      }                                                                                        
    if(preg_match("[\w\s.,a-zA-Z$a,\.]",$b)){
      $flag=false;
      }
    if($flag){
     $i;
    for($i=0;$i<=$c;$i++)
    {
       $newtext = str_replace($a,$d,$b);
       echo $newtext;
       echo "</br>";
       break;
    }
 } else {
       echo"not found ";}
 }
  ?>

这是我想匹配原始段落中的单词(段落)的代码,但问题是这样的。在一行中,单词 (paragraph) 是这样写的 (paragraph,) 和 (paragraph.) 这就是为什么preg_match找不到这两个单词并且同样如此的原因preg_replace

4

1 回答 1

1

这是不正确的:

if(preg_match("[\w\s.,a-zA-Z$a,\.]",$b))

正则表达式需要开始和结束分隔符。它应该是:

if(preg_match("/[\w\s.,a-zA-Z$a,\.]/", $b))

另请注意,您的正则表达式也不正确。我可以看到一些错误(可能还有更多):

  1. 在方括号内你不需要转义点
  2. 你似乎有另一个点可以匹配任何字符
  3. 你有\w这意味着单词字符,因此你不需要单独的a-zA-Z
  4. 你有一个放错位置的 $ 符号
于 2013-05-17T12:15:01.463 回答