任何人都可以帮助我解释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
的用法,这里需要它。帮我解释一下 - 提前谢谢
答案 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