php如何正则替换字符串?-PHP问题

资源魔 23 0

php若何正则交换字符串?

php正则交换字符串的办法:

PHP preg_replace() 正则交换,与JavaScript 正则交换没有同,PHP preg_replace() 默许就是交换一切符号婚配前提的元素。

preg_replace (正则表白式, 交换成, 字符串, 最年夜交换次数【默许-1,有数次】, 交换次数)

正则字符都有特定含意,假如需求再用来示意原字符含意,就需求正在后面加“\”本义,即便非正则字符,用“\”本义也是不成绩的。

1+1=2  正则表白式也能够是: \1\+\1\=\2
对一切字符都本义,然而这类没有倡议应用。

而正则表白式必需要应用定界符突围起来,正在JavaScript中定界符是“/”,而正在PHP中,比拟常见的是用“/”定界,也能够用“#”定界,并且里面还需求用引号突围起来。

假如正则表白式蕴含这些定界符,您就需求对这些字符进行本义。

1、PHP 正则表白式定界符

年夜少数言语的正则表白式都是由“/”作为定界符的,而正在PHP中,还能够应用“#”定界,假如字符串中蕴含年夜量“/”字符,正在应用“/”定界的时分,就需求对这些“/”本义,而应用“#”就没有需求本义,更简约。

<?php
$subject='钱运来PHP博客的网址是 http://blog.snsgou.com/_blog/ ,你能把这个网址交换成正确的网址吗?';
 
// 下面的要求就是把 http://blog.snsgou.com/_blog 交换成 http://blog.snsgou.com/
 
// . : - 都是正则符号,以是需求本义,而 / 是定界符,假如字符串中蕴含 / 定界符,就需求本义
 
echo preg_replace('/http\:\/\/www\.qianyunlai\.com\/\_blog\//', 'http://blog.snsgou.com/', $subject);
 
echo '<br />';
 
// 正在 #作为定界符,/ 就再也不是定界符的含意,就没有需求本义了。
echo preg_replace('#http\://www\.qianyunlai\.com/\_blog/#', 'http://blog.snsgou.com/', $subject);
 
// 下面两条输入后果都同样,【钱运来PHP博客的网址是 http://blog.snsgou.com/,你能把这个网址交换成正确的网址吗?】
 
?>

经过下面的两条PHP 正则交换代码咱们能够发现,假如正则语句中蕴含年夜量“/”,无论应用“/” 仍是 “#”做定界符都是能够的,然而应用“#”能让代码看起来更简约。但仍是倡议您放弃应用“/”作为定界符,由于正在JavaScript等言语中,只能应用“/”作为定界符,这样写起来能够构成习气,贯穿于其余言语中。

2、PHP 正则表白式润饰符

润饰符被放正在PHP正则表白式定界符“/”之后,正在正则表白式尾部引号以前。

i 疏忽巨细写,婚配没有思考巨细写

m 多行自力婚配,假如字符串没有蕴含[\n]等换行符就以及一般正则同样。

s 设置正则符号 . 能够婚配换行符[\n],假如不设置,正则符号.不克不及婚配换行符\n。

x 疏忽不本义的空格

e eval() 对婚配后的元素执行函数。

A 前置锚定,束缚婚配仅从指标字符串开端搜寻

D 锁定$作为末端,假如不D,假如字符串蕴含[\n]等换行符,$照旧照旧婚配换行符。假如设置了润饰符m,润饰符D 就会被疏忽。

S 对非锚定的婚配进行剖析

U 非贪心,假如正在正则字符量词后加“?”,就能够规复贪心

X 关上与perl 没有兼容附件

u 强迫字符串为UTF-8编码,普通正在非UTF-8编码的文档中才需求这个。倡议UTF-8环境中没有要应用这个。

假如您相熟JavaScript 的正则表白式,或者肯定相熟JavaScript 正则表白式的润饰符“g”,代表婚配一切合乎前提的元素。而正在PHP 正则交换中,是婚配一切符号前提的元素,以是没有存正在JavaScript 润饰符“g”。

3、PHP 正则中文以及疏忽巨细写

PHP preg_replace() 是区别巨细写的,同时只能婚配ASCII编码内的字符串,假如需求婚配没有区别巨细写以及中文等字符需求增加相应的润饰符 i 或 u。

<?php
$subject='钱运来PHP博客网址:http://www.QIanyunlai.com/';
 
// 巨细写没有同,输入【钱运来PHP博客网址:http://www.QIanyunlai.com/】
echo preg_replace('/QIAN/', 'qian', $subject);
echo '<br />';
 
// 疏忽巨细写,执行交换输入【钱运来PHP博客网址:http://blog.snsgou.com/】
echo preg_replace('/QIAN/i', 'qian', $subject);
echo '<br />';
 
// 强迫 UTF-8中文,执行交换,输入【钱运来PHP博客:http://www.QIanyunlai.com/】
echo preg_replace('/网址/u', '', $subject);
?>

巨细写以及中文正在PHP中都是敏感的,然而正在JavaScript正则中,只对巨细写敏感,疏忽巨细写也是经过润饰符 i 作用的,然而JavaScript 没有需求奉告能否是UTF-8中文等非凡字符,间接能够婚配中文。

4、PHP 正则换行符实例

PHP 正则表白式正在遇到换行符时,会将换行符当作字符串两头一个一般字符。而通用符号.不克不及婚配\n,以是遇到带有换行符的字符串正则会有不少要点。

<?php
$subject="snsgou.com\nIS\nLOVING\nYOU";
 
// 想要把下面$subject 交换成snsgou.com
 
echo preg_replace('/^[A-Z].*[A-Z]$/', '', $subject), '<br />';
// 这个正则表白式是,婚配只蕴含\w的元素,$subject 是以q扫尾,合乎[A-Z],并且末端是m,也合乎[A-Z]。.无奈婚配\n
// 输入【snsgou.com IS LOVEING YOU】
 
echo preg_replace('/^[A-Z].*[A-Z]$/s', '', $subject), '<br />';
// 这个用润饰符s,也就是 . 能够婚配 \n 了,以是整句婚配,输入空
// 输入【】
 
echo preg_replace('/^[A-Z].*[A-Z]$/m', '', $subject), '<br />';
// 这里应用了润饰符,将\n作为多行自力婚配。也就等价于:
/*
$preg_m = preg_replace('/^[A-Z].*[A-Z]$/m', '', $subject);
 
$p = '/^[A-Z].*[A-Z]$/';
$a = preg_replace($p, '', 'snsgou.com');
$b = preg_replace($p, '', 'IS');
$c = preg_replace($p, '', 'LOVING');
$d = preg_replace($p, '', 'YOU');
 
$preg_m === $a . $b . $c . $d;
*/
// 输入【snsgou.com】
?>

当前您正在应用PHP 抓取某个网站内容,并用正则批量交换的时分,总无奈防止疏忽猎取的内容蕴含换行符,以是正在应用正则交换的时分肯定要留意。

5、PHP 正则婚配执行函数

PHP 正则交换能够应用一个润饰符e,代表 eval() 来执行婚配后的内容某个函数。

<?php
$subject='钱运来PHP博客网址:http://www.qianYUNlai.com/';
 
// 将下面网址转为小写
 
echo preg_replace('/(http\:[\/\w\.\-]+\/)/e', 'strtolower("$1")', $subject);
// 应用润饰符e之后,就能够对婚配的网址执行PHP 函数 strtolower() 了
// 输入 【钱运来PHP博客网址:http://blog.snsgou.com/】
?>

依据下面代码,虽然婚配后的函数 strtolower() 正在引号内,然而照旧会被eval()执行。

6、正则交换婚配变量向后援用

假如您相熟JavaScript,肯定对$1 $2 $3 …… 等向后援用比拟相熟,而正在 PHP 中这些也能够被当做向后援用参数。而正在PHP中,还能够应用 \1 \\1 来示意向后援用。

向后援用的概念就是婚配一个年夜片断,这个正则表白式外部又被用括号切割成若干小婚配元素,那末每一个婚配元素就被依照小括号序列用向后援用替代。

<?php
$subject='钱运来PHP博客网址:http://blog.snsgou.com/,你yun-lai了吗?';
 
echo preg_replace('/.+(http\:[\w\-\/\.]+\/)[^\w\-\!]+([\w\-\!]+).+/', '$1', $subject);
echo preg_replace('/.+(http\:[\w\-\/\.]+\/)[^\w\-\!]+([\w\-\!]+).+/', '\1', $subject);
echo preg_replace('/.+(http\:[\w\-\/\.]+\/)[^\w\-\!]+([\w\-\!]+).+/', '\\1', $subject); // 通罕用这个
echo '<br />';
// 下面三个都是输入 【http://blog.snsgou.com/】
 
echo preg_replace('/^(.+)网址:(http\:[\w\-\/\.]+\/)[^\w\-\!]+([\w\-\!]+).+$/', '栏目:$1<br>网址:$2<br>牌号:$3', $subject);
/*
栏目:钱运来PHP博客
网址:http://blog.snsgou.com/
牌号:yun-lai
*/
echo '<br />';
 
// 括号中括号,里面括号先计数
echo preg_replace('/^((.+)网址:(http\:[\w\-\/\.]+\/)[^\w\-\!]+([\w\-\!]+).+)$/', '原文:$1<br>栏目:$2<br>网址:$3<br>牌号:$4', $subject);
/*
原文:钱运来PHP博客网址:http://blog.snsgou.com/,你yun-lai了吗?
栏目:钱运来PHP博客
网址:http://blog.snsgou.com/
牌号:yun-lai
*/
?>

保举教程:《PHP视频教程》

以上就是php若何正则交换字符串?的具体内容,更多请存眷资源魔其它相干文章!

标签: php教程 php故障解决 php使用问题 正则替换

抱歉,评论功能暂时关闭!