strstr 定義和用法
語法
strstr(string,search,before_search)
參數 | 描述 |
---|---|
string | 必需。規定被搜索的字符串。 |
search |
必需。規定所搜索的字符串。 如果此參數是數字,則搜索匹配此數字對應的 ASCII 值的字符。 |
before_search |
可選。默認值為 "false" 的布爾值。 如果設置為 "true",它將返回 search 參數第一次出現之前的字符串部分。 |
技術細節
返回值: | 返回字符串的剩余部分(從匹配點)。如果未找到所搜索的字符串,則返回 FALSE。 |
PHP 版本: | 4+ |
更新日志: | 在 PHP 5.3 中,新增了 before_search 參數。 |
更多實例
例子 1
以 "o" 的 ASCII 值搜索字符串,并返回字符串的剩余部分:
1
2
3
|
<?php echo strstr( "Hello world!" ,111); ?> |
返回
o world!
例子 2
返回 "world" 第一次出現之前的字符串部分:
1
2
3
|
<?php echo strstr ( "Hello world!" , "world" ,true); |
結果:
Hello
例子3
查找 "Shanghai" 在 "I love Shanghai!" 中的第一次出現,并返回字符串的剩余部分:
1
2
3
|
<?php echo strstr ( "I love Shanghai!" , "Shanghai" ); ?> |
結果:
Shanghai!
PHP 判斷字符串是否包含其它字符
以下幾個函數均可用來判斷某字符串是否包含另外一個字符串PHP 中判斷一個字符串是否包含其它字符是很常見的操作。 雖然很簡單,但還是寫了幾個函數,質量可能不是很高,權當鍛煉。 如果這幾個函數恰好能幫上你的忙,我將會很高興的。這幾個函數中,我比較喜歡第四個。。。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
<?php /** * 以下幾個函數均可用來判斷某字符串是否包含另外一個字符串 * PHP 中判斷一個字符串是否包含其它字符是很常見的操作。 * 雖然很簡單,但還是寫了幾個函數,質量可能不是很高,權當鍛煉。 * 如果這幾個函數恰好能幫上你的忙,我將會很高興的。 */ /** * 利用一下 strpos() 函數 * @param unknown_type $haystack * @param unknown_type $needle */ function isInString1( $haystack , $needle ) { //防止$needle 位于開始的位置 $haystack = '-_-!' . $haystack ; return (bool) strpos ( $haystack , $needle ); } /** * 利用字符串分割 * @param unknown_type $haystack * @param unknown_type $needle */ function isInString2( $haystack , $needle ) { $array = explode ( $needle , $haystack ); return count ( $array ) > 1; } /** * 用了一下正則,這種方法十分不建議,尤其是 $needle 中包含 * 特殊字符,如 ^,$,/ 等等 * @param unknown_type $haystack * @param unknown_type $needle */ function isInString3( $haystack , $needle ) { $pattern = '/' . $needle . '/' ; return (bool)preg_match( $pattern , $haystack ); } /** * 利用一下 strpos() 函數 * @param unknown_type $haystack * @param unknown_type $needle */ function isInString4( $haystack , $needle ) { return false !== strpos ( $haystack , $needle ); } //測試 $haystack = 'I am ITBDW' ; $needle = 'IT' ; var_dump(isInString1( $haystack , $needle )); |
我覺得最簡單的就是這種了 strpos($a, $b) !== false 如果$a 中存在 $b,則為 true ,否則為 false。
用 !== false (或者 === false) 的原因是如果 $b 正好位于$a的開始部分,那么該函數會返回int(0),那么0是false,但$b確實位于$a中,所以要用 !== 判斷一下類型,要確保是嚴格的 false。昨天晚上去中關村圖書大廈,看到一本書中用的是 strpos === true 來判斷,這是極其不正確的。。。
出錯的書為《PHP求職寶典》107頁(2012-02-26更新)
其它的還有 PHP 原生支持的函數,如 strstr(),stristr() 等,直接判斷就可以了。
定義和用法
strstr() 函數搜索一個字符串在另一個字符串中的第一次出現。
該函數返回字符串的其余部分(從匹配點)。如果未找到所搜索的字符串,則返回 false。
語法
strstr(string,search)
參數 描述
string 必需。規定被搜索的字符串。
search 必需。規定所搜索的字符串。如果該參數是數字,則搜索匹配數字 ASCII 值的字符。
提示和注釋
注釋:該函數是二進制安全的。
注釋:該函數對大小寫敏感。如需進行大小寫不敏感的搜索,請使用 stristr()。
例子 1
1
2
3
|
<?php echo strstr ( "Hello world!" , "world" ); ?> |
//輸出:world!
例子 2
在本例中,我們將搜索 "o" 的 ASCII 值所代表的字符:
1
2
3
|
<?php echo strstr ( "Hello world!" ,111); ?> |
//輸出:o world!
例子 3
1
2
3
4
5
6
7
8
|
<?php $email = 'admin@jb51.net' ; $domain = strstr ( $email , '@' ); echo $domain ; // prints @jb51.net $user = strstr ( $email , '@' , true); // As of PHP 5.3.0 echo $user ; // prints admin ?> |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
$city_str = fopen (cgi_path. "/data/weather/city.dat" , "r" ); $city_ch = fread ( $city_str , filesize (cgi_path. "/data/weather/city.dat" )); $city_ch_arr = explode ( "|" , $city_ch ); //如果能匹配到所在市 if ( strstr ( $area_ga , "市" )){ foreach ( $city_ch_arr as $city_ch_arr_item ){ if (@ strstr ( $area_ga , $city_ch_arr_item )){ echo $area_ga . '<br>' ; echo $city_ch_arr_item ; $s_city = $city_ch_arr_item ; } } } //如果找不到市 那么看看是不是能找到省 有時會有這樣的情況:廣東省長城寬帶 這樣的一律歸屬到該省省府 elseif ( strstr ( $area_ga , "河北" )!==false){ $s_city = "石家莊" ; } elseif ( strstr ( $area_ga , "福建" )!==false){ $s_city = "福州" ; } elseif ( strstr ( $area_ga , "臺灣" )!==false){ $s_city = "臺北" ; } elseif ( strstr ( $area_ga , "香港" )!==false){ $s_city = "香港" ; } elseif ( strstr ( $area_ga , "廣西" )!==false){ $s_city = "南寧" ; } elseif ( strstr ( $area_ga , "浙江" )!==false){ $s_city = "杭州" ; } elseif ( strstr ( $area_ga , "江蘇" )!==false){ $s_city = "南京" ; } elseif ( strstr ( $area_ga , "山東" )!==false){ $s_city = "濟南" ; } elseif ( strstr ( $area_ga , "安徽" )!==false){ $s_city = "合肥" ; } elseif ( strstr ( $area_ga , "湖南" )!==false){ $s_city = "長沙" ; } elseif ( strstr ( $area_ga , "四川" )!==false){ $s_city = "成都" ; } elseif ( strstr ( $area_ga , "云南" )!==false){ $s_city = "昆明" ; } elseif ( strstr ( $area_ga , "廣東" )!==false){ $s_city = "廣州" ; } elseif ( strstr ( $area_ga , "貴州" )!==false){ $s_city = "貴陽" ; } elseif ( strstr ( $area_ga , "西藏" )!==false){ $s_city = "拉薩" ; } elseif ( strstr ( $area_ga , "新疆" )!==false){ $s_city = "烏魯木齊" ; } elseif ( strstr ( $area_ga , "蒙古" )!==false){ $s_city = "呼和浩特" ; } elseif ( strstr ( $area_ga , "黑龍江" )!==false){ $s_city = "哈爾濱" ; } elseif ( strstr ( $area_ga , "遼寧" )!==false){ $s_city = "沈陽" ; } elseif ( strstr ( $area_ga , "吉林" )!==false){ $s_city = "長春" ; } elseif ( strstr ( $area_ga , "河南" )!==false){ $s_city = "鄭州" ; } elseif ( strstr ( $area_ga , "湖北" )!==false){ $s_city = "武漢" ; } elseif ( strstr ( $area_ga , "山西" )!==false){ $s_city = "太原" ; } elseif ( strstr ( $area_ga , "陜西" )!==false){ $s_city = "西安" ; } elseif ( strstr ( $area_ga , "甘肅" )!==false){ $s_city = "蘭州" ; } elseif ( strstr ( $area_ga , "寧夏" )!==false){ $s_city = "銀川" ; } elseif ( strstr ( $area_ga , "海南" )!==false){ $s_city = "海口" ; } elseif ( strstr ( $area_ga , "江西" )!==false){ $s_city = "南昌" ; } elseif ( strstr ( $area_ga , "澳門" )!==false){ $s_city = "澳門" ; } //如果都不存在 就是默認顯示廣州 比如本地機 else { $s_city = "廣州" ; } |
如上代碼:
其中 city.dat中是一些城市 格式是這樣的
廣州|深圳|汕頭|惠州|珠海|揭陽|佛山|河源|陽江|茂名|湛江|梅州|肇慶|韶關|潮州|東莞|中山|清遠|江門|汕尾|云浮|增城|從化|樂昌|南雄|臺山|開平|鶴山|恩平|廉江|雷州|吳川|高州|化州|高要|四會|興寧|陸豐|陽春|英德|連州|普寧|羅定|北京|天津|上海|重慶|烏魯木齊|克拉瑪依|石河子|阿拉爾|圖木舒克|五家渠|哈密|吐魯番|阿克蘇|喀什|和田|伊寧|塔城|阿勒泰|奎屯|博樂|昌吉|阜康|庫爾勒|阿圖什|烏蘇|拉薩|日喀則|銀川|石嘴山|吳忠|固原|中衛|呼和浩特|包頭|烏海|赤峰|通遼|鄂爾多斯|呼倫貝爾|巴彥淖爾|烏蘭察布|霍林郭勒|滿洲里|牙克石|扎蘭屯|根河|額爾古納|豐鎮|錫林浩特|二連浩特|烏蘭浩特|
參考
1
2
3
4
5
6
7
8
9
10
|
<?php echo strstr ( 'aaaaaaaaaaaboaaaaaaaaaaaaboxcccccccccbcccccccccccccc' , 'box' ). "<br>\n" ; //輸出boxcccccccccbcccccccccccccc // 完整匹配中間的box 不因前而的b而停止 echo strstr ( 'aaaaaaAbaaa aaaa aaaaaaaaaboxccccccccccccboxccccccccccc' , 'box' ). "<br>\n" ; //輸出boxccccccccccccboxccccccccccc // 有兩個關鍵字時, 遇到第一個停止. echo strstr ( 'Subscrtibe our to free newsletter about New Freew to' , 'to' ). "<br>\n" ; //輸出to free newsletter about New Freew to ?> |
注釋:該函數對大小寫敏感。如需進行不區分大小寫的搜索,請使用 stristr() 函數。