字符串的表示:双引号,单引号,unix的here格式。
双引号和here支持变量替换,复杂的替换可以用{}号括起来。
$n=12;
echo "you are the {$n}th person"; //结果为you are the 12th person
here格式使字符串可以除了有双引号的能力外还可以简单地支持多行
$string = <<< string_1 //<<<是字符串定界符
sir humhrey 'davy'
abominated "gravy" //单引号和双引号都值作为一般符号
he lived in the odium.
of having discovered sodim.
//空行和空白换行也保留
string_1; //结束 注意必须整个定义的字符都到最前不然呵呵
字符串的输出 echo print() printf() print_r()
echo 是一个结构支持多个值输出。它不是函数就是说不使用小括号是正确的。
echo 'first','one','time'; //结果为firstonetime
echo ('first','one','time'); //语法错误
if (echo('abc')){} //因为不是函数所以也是语法错误
print() 一次发送一个值
if (print('hello,world')){} //正确函数成功输出为true
printf() 把值传入模板中(定义字符串格式)
格式替换是由%号开头,接着是修饰符,用类型说明符结束。要输出%用%%
修饰符的可以是多个符号,顺序是填充说明符0,空白或是单引号开头的任意字符,然后一个符号,对字符串负号-表示强制向左对齐,对数字+就是强制加号显示,再到就是包含的最少字符数。
如果是浮点数则是小数点加数字组成。
类型说明符
B 参数是整数用二进制表示
C 参数是整数对应的字符
D 参数是整数对应的十进制
e or F 参数是双精度用浮点数显示
G 参数是精确双精度用浮点数显示
O 参数是整数用八进制显示
S 参数是字符串用字符串显示
U 参数是无符号整数用十进制显示
x 参数是整数用小写十六进制显示
X 参数是整数用大写十六进制显示
printf('bond %03d',7); //bond 007
printf('%.2f%% complete',2.1); // 2.10% complete
printf('%02D/%02D/%04D',2,12,2003); //02/12/2003
sprintf()最大的不同是他不显示只格式化。
print_r()
var_dump()都用于调试
他们都可以显示变量的内容无论是数组还是对象,但var_dump()的内容更多。但要注意var_dump()在同一个元素访问3次后会停止。而print_r()却不会。
class p {
var $name='net';
//...
}
$p=new p;
print_r(p);
object
(
[name]=>net
)
strlen()函数返回字符串的长度。
$string="hello.world";
for ($i=0;$i < strlen($string);$i++){
printf("the %dth char is %s\n",$i,$string{$i}); //访问字符串的单个字符
}
删除空白 trim() , ltrim(), rtrim() 这三个函数默认删除(空格" ",制表符"/t",换行"/n",回车"\r",字符0"\0",纵向列表符"\x0B")当然你也可以指定要删除的字符。
$record=trim(' string '," \r\n\0\x0B");
改变大小写
strtolower() //全小写
strtoupper() //全大写
ucfirst() //字符串第一个字母大写
ucwords() //字符串每个单词首字母大写
编码和转义
HTML
在html中一些特殊的字符用实体来显示,如果你直接使用字符,浏览器是不承认的,如:< ,>,&和重音字符。
htmlentities()将除了空格外都转换。
他有三个参数htmlentities(input,quote_style,charset)
charset识别使用的字符集如ISO-8859-1
quote_style控制单引号和双引号是否变化,ENT_COMPAT(默认)只转换双引号,ENT_QUOTES两者都转,ENT_NOQUOTES则都不转。
htmlspecialchars()转换最小实体集一般用这个就行了。
删除HTML标签
strip_tags()函数能删除字符串中除保留标签中的属性
提取元标签
get_meta_tags()函数能提取元标签成为数组,元标签的名字变键,内容成为对应的值。
$meta_array=get_meta_tags('http://www.myweb.com');
echo "web page by {meat_array[author]}"
URL
url的处理只能处理/后的字符串,因为冒号和反斜杠对被转义,要处理URL是因为你要动态生成一些页面的超链接地址。
rawurlencode()
$name="programming PHP";
$outurl=rawurlencode($name);
echo http://localhost/$outurl;
rawurldecode()是他的反操作。
urlencode() 和urldecode() 的不同是他们把空格编码为+而不是%20。这是创建查询字符串和cookie
SQL
sql的转义主要是在单引号,双引号,空字节和分斜杠前加一个反斜杠(\)
addslashes()
stripslashes()
比较字符串
字符串和数字的比较不能用大小比较,因为字符串在数字里都比都是0
strcmp() 将先转换为字符串再比较ASCLL排序。如果有数字那将出现例如5>10
strcasecmp() 先转换为小写字符串再比较。
他们最后一个参数是比较前面多少个字符。
strnatcmp() 和上面不同的地方是他们比较的是自然顺序,如 1.。。100就是顺序排列的,
strnatcasecmp()
处理和查找字符串
复制出子串 substr(原字符串,开始位置[,长度]) 长度不指定默认到尾
子串出现的次数 substrcount(原字符串,子串)
替换子串 substr_replace(原字符串,替换字符串,开始位置[,长度]) 不指定长度将在替换后删除到结尾,如果为0将是插入操作。 如果开始位置和长度为负数,表示从尾开始算。
翻转字符串的顺序 strrev()
重复字符串 str_repeat(被要重复的字符串,次数)
加入字符 str_pad(原字符串,加的数量[,加入的字符[,方式]]) str_pad_right默认值,str_pad_left,str_pad_both
分解字符串 explode(分隔符,原字符串[,数组的最大数]) 分解为数组
implode(分隔符,数组) join()函数功能一样。
字符串查找
strpos(原字符串,查找的子串) 没有就返回false 在开头为0 ,这里要注意比较结果的时候的用===false
strrpos(原字符串,查找的字符) 注意这里找的是字符,而且是在字符串中的最后位置,结果和sprpos()一样,strrchr()作用一样。
strspn(原字符串,字符集) 字符串中有多少个字符集里的字符
strcspn(原字符串,字符集)字符串中有多少个不是字符集里的字符
分解URL parse_url(URL) 分解成数组,键值是标准的URL名称
正则表达式
作用:
匹配,从字符串中提取信息。
用新文本取代匹配的文本。
把字符串分成小块的数组。
正则表达式主要分POSIX和Perl两种
POSIX用
ereg()函数来匹配,
ereg_replace()函数来替换
split()函数来拆分
Perl用
preg_match()函数来匹配
preg_replace(()来替换
preg_split()来拆分
. 表示任意单个字符 如果要表示特殊字符用\ 如: \.
[] 表示括起来的是字符集 如: [adfdss]
- 表示连续的字符集
| 表示 选择的部分
ereg('c,t','dave cmt') ; //true
ereg('c[ademt]','dave cmt'); //true
ereg('c[a-z]t','dave cmt') ; //true
erag('cmt|cat','dave cmt'); //true
重复
? 0或1
* 0或更多
+ 1或更多
{n} n次
{n,m} 至少n次最多m次
{n,} 至少n次
ereg('ca+t','caaaaaat'); //true
子串为用()括起的部分
ereg('a(dgt)+ big','it was adgt dgt '); //true
^ 表示字符串开头
$ 表示字符串结尾
上面的是Posix的形式
perl的必须要用分隔符括起来,他的分隔符一般用/ ,但实际上是除了\外的任何特殊字符都可以。因为\反斜杠表示特殊字符
preg_match('/\/use\/local\/\','/use/local/abc') ; //true 这里的\/表示符号/
preg_match('$/use/local/$','/use/local/abc'); //true
组合正则表达式的威力
preg_match('/is (.*)$/','the key is in my abc',$capt); $capt[1] 是 'in mt abc'
字符集
\s 空白符
\S 非空白符
\w 英文字母和数字
\W 非英文字母和数字
\d 数字
\D 非数字
\b 单词边界 在\w\W之间或字符串开头或尾
\B 非单词边界 在\w和\w之间或\W和\W之间
\A 字符串开头
\Z 字符串尾或尾的\n前
\z 字符串尾
perl的重复 默认 具有贪婪性,就是说找最大满足的
非贪婪就在后面加?
??
*?
{m}?
{m,}?
{m,n}?
preg_match('/(?:ello)(.*)/','jello biafra',$mat); $mat[1]是' biafra' 这叫非捕获匹配 使用的是(?:子串)结构
后缀选项
就是放在最后的选项
/i 不分大小写
/s 使用.匹配任何字符包括换行
/x 从模式作用删除空白符号和注释
/m 使用^匹配换行符后的内容,美元鼓号$匹配换行符前的内容
/e 如果替换字符是php代码,使用eval()执行该代码来得到实际的替换字符串
/U 反转贪婪性
/u 把字符串做为UTF-8编码来处理
/X 如果一个反斜杠后跟着没有特殊意义的字符,将产生一个错误
/A 和^一样的作用定位在字符串开头
/D 使$仅作用在一行
/S 加紧检查,在循环中可以加快运行
这些选项可以加起来用 如 /imD
这些选项还可以在内联选项中使用,(?后缀选项:子串)
preg_match('/I like (?i:PHp)/'.'I like php'); //true
- 表示关闭内联选项 (?-i:PHp) 上面的结果是false .
要捕获字符串必须要加()
前向后向断言
断言的作用就是“如果这里是下一个,就匹配这”
(?=范式) 正前向
(?!范式) 负前向
(?<=范式) 正后向
(?<!范式) 负后向
例子1
$meggage=preg_split('/(?=^from)/m',$mailbox); 拆分mailbox文本中from后的内容
例子2
<?php
$str= <<< END
name = 'Time O\' reilly';
END;
$p = <<<END
{
'(.*?(?<! \\\\)) #\\\\转义\\
'
}x
END;
preg_match("$p",$str,$match); //Tim O\'Reilly
echo $match[1];
?>
?>模式 是剪切就是防止正则表达式不断回溯子模式
(?(条件)yes模式|no模式)
匹配
preg_match(模式,原字符串[,捕获])
preg_math_all(模式,原字符串,捕获[,参数])
参数可以是PREG_PATTERN_ORDER 和PREG_SET_ORDER 他决定捕获里数组的布局
替换
preg_replace(模式,替换的字符串,原字符串[,限制])
如果要多重替换,那么要定义模式数组和替换字符数组
如果替换的字符串比模式的小,匹配的字符都将删除。这是删除的好方法。
逆向引用就是引用找出的字符,用$1 ,$2,$3表示
/e 就是把替换字符当作php代码对待
拆分
preg_split(模式,原字符串,限制[,参数])
参数为:PREG_SPLIT_NO_EMPTY 和 PREG_SPLIT_DELIM_CAPTURE
使用正则表达式过滤数组
preg_grep(模式,字符串) 返回与模式匹配的的字符串
引用正则表达式
preg_quote(字符串[,限制字符])
|Archiver|小黑屋|手机版|壹佰网 ERP100
( 京ICP备19053597号-2 )
GMT+8, 2025/11/29 17:20 , Processed in 0.008898 second(s), 12 queries , File On.
Powered by Discuz! X3.4
Copyright © 2001-2020, Tencent Cloud.