簡體   English   中英

將PHP的eregi更改為preg_match

[英]change PHP's eregi to preg_match

我不知道如何解決這個錯誤

 Warning: preg_match(): Unknown modifier '[' in 

我的代碼是

while(list($k,$v)=each($con2)) {
    $patt="($this->block_start_word|$this->block_end_word)[[:blank:]]*([0-9a-zA-Z\_]+)[[:blank:]]*$this->block_end_delim(.*)";
    if (eregi($patt,$v,$res)) {

我想將eregi的php版本更新為preg_match,我對此進行了解釋

while(list($k,$v)=each($con2)) {
    $patt="($this->block_start_word|$this->block_end_word)[[:blank:]]*([0-9a-zA-Z\_]+)[[:blank:]]*$this->block_end_delim(.*)";
    if ( preg_match($patt,$v,$res)) {

如您在此答案中所見,preg_match將第一個字符視為定界符如何將PHP的eregi更改為preg_match

具體來說,您會收到錯誤消息,因為preg_match使用'('作為分隔符,因此在($ this-> block_start_word | $ this-> block_end_word)和'['

將模式更改為$ patt =“ /($ this-> block_start_word | $ this-> block_end_word)[[:blank:]] ([0-9a-zA-Z _] +)[[:blank:]] $ this - > block_end_delim(。*)/“;

它應該起作用,Goodluck!

好,讓我們來看一下這個正則表達式:

"($this->block_start_word|$this->block_end_word)[[:blank:]]*([0-9a-zA-Z\\_]+)[[:blank:]]*$this->block_end_delim(.*)"

我想你要:

  • 文字字符串$this->block_start_word$this->block_end_word
  • 后跟0個或多個空格字符
  • 后跟1個或多個字母數字字符
  • 后跟0個或多個空格
  • 后跟文字字符串$this->block_end_delim
  • 直到行尾

記住,怎么樣

<?php
$handle = fopen('php://stdin', "r");
while (($line = fgets($handle, 4096)) !== false) {
        $exp  = '/';
        $exp .= '(';
        $exp .= '\$this\-\>block_start_word';
        $exp .= '|';
        $exp .= '\$this\-\>block_end_word';
        $exp .= ')';
        $exp .= '\s*'; // Like [[:blank:]]*
        $exp .= '([0-9a-zA-Z\_]+)';
        $exp .= '\s*'; // Like [[:blank:]]*
        $exp .= '\$this\-\>block_end_delim';
        $exp .= '(.*)/';
        if(preg_match($exp,$line)) {
                print $line;
        }
}
?>

如果$this->block_start_word$this->block_end_word$this->block_end_delim在PHP腳本的其他位置設置:

<?php
$handle = fopen('php://stdin', "r");
while (($line = fgets($handle, 4096)) !== false) {
        $exp  = '/';
        $exp .= '(';
        $exp .= '$this->block_start_word;
        $exp .= '|';
        $exp .= '$this->block_end_word;
        $exp .= ')';
        $exp .= '\s*'; // Like [[:blank:]]*
        $exp .= '([0-9a-zA-Z\_]+)';
        $exp .= '\s*'; // Like [[:blank:]]*
        $exp .= $this->block_end_delim;
        $exp .= '(.*)/';
        if(preg_match($exp,$line)) {
                print $line;
        }
}
?>

使用preg_match您應該定義定界符,並且最好同時包含preg_quote

$patt="/(".preg_quote($this->block_start_word)."|".preg_quote($this->block_end_word."))[[:blank:]]*([0-9a-zA-Z\_]+)[[:blank:]]*".preg_quote($this->block_end_delim)."(.*)/";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM