preg_replace()的用法 - php

时间:2013-10-09 21:58:52

标签: php

任何人都可以帮助我解释preg_replace()在以下行中的用法:

if ( isset( $data['title'] ) ) $this->title = preg_replace ( "/[^\.\,\-\_\'\"\@\?\!\:\$ a-zA-Z0-9()]/", "", $data['title'] );
 // $title is variable for storing title of a blog post

这是完整的构造函数代码,其中设置了变量属性:

public function __construct( $data=array() ) {
    if ( isset( $data['id'] ) ) $this->id = (int) $data['id'];
    if ( isset( $data['publicationDate'] ) ) $this->publicationDate = (int) $data['publicationDate'];
    if ( isset( $data['title'] ) ) $this->title = preg_replace ( "/[^\.\,\-\_\'\"\@\?\!\:\$ a-zA-Z0-9()]/", "", $data['title'] );
    if ( isset( $data['summary'] ) ) $this->summary = preg_replace ( "/[^\.\,\-\_\'\"\@\?\!\:\$ a-zA-Z0-9()]/", "", $data['summary'] );
    if ( isset( $data['content'] ) ) $this->content = $data['content'];
  }

我无法理解preg_replace的用法,这里需要它。帮我解释一下 - 提前谢谢

2 个答案:

答案 0 :(得分:2)

看起来无论是谁写的都有一些疯狂的转义字符,这对于角色类中的大多数字符来说都是不需要的。这个正则表达式可以重写为

/[^.,\-_'"@?!:$ a-zA-Z0-9()]/ <-- note that only the dash needs to be escaped here

这基本上说评估的字符串不能包含以下任何字符:

.,-_'"@?!:$ a-zA-Z0-9()

这是因为字符类中的开头克拉^使其成为否定类。

此处的用途是通过替换空字符串从输出中删除不在该列表中的字符。所以,如果你有像

这样的东西
$this->title = 'Here is a bad symbol >';

这将成为:

'Here is a bad symbol '

答案 1 :(得分:1)

preg_replace查找“搜索模式”并用值替换找到的子字符串,因此preg_replace ( "/[^\.\,\-\_\'\"\@\?\!\:\$ a-zA-Z0-9()]/", "", $data['title'] )查找一些符号并用空字符串替换它们

pattern /[^...]/表示 - 此列表中的所有符号,即此代码用空字符串替换所有非字母数字和一些标点符号,因此,文本如{ {1}}只是a#b,但ab将是a?b?在“允许”符号中。

不要对许多\符号感到困惑 - 它们只需要转义,所以基本上允许的符号列表为a?b