注册 登录
壹佰网|ERP100 - 企业信息化知识门户 返回首页

的个人空间 https://www.erp100.com/?0 [收藏] [复制] [RSS]

日志

5.字符串

已有 603 次阅读2007/8/17 10:21

字符串的表示:双引号,单引号,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(字符串[,限制字符])








评论 (0 个评论)

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

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.

返回顶部