欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

查找字符串中是否包含某些字符的函数strstr及其它

程序员文章站 2022-04-08 21:54:56
...
  1. /**
  2. * 以下几个函数均可用来判断某字符串是否包含另外一个字符串
  3. * PHP 中判断一个字符串是否包含其它字符是很常见的操作。
  4. * 如果这几个函数恰好能帮上你的忙,我将会很高兴的。
  5. */
  6. /**
  7. * 利用一下 strpos() 函数
  8. * @param unknown_type $haystack
  9. * @param unknown_type $needle
  10. * @link jbxue.com
  11. */
  12. function isInString1($haystack, $needle) {
  13. //防止$needle 位于开始的位置
  14. $haystack = '-_-!' . $haystack;
  15. return (bool)strpos($haystack, $needle);
  16. }
  17. /**
  18. * 利用字符串分割
  19. * @param unknown_type $haystack
  20. * @param unknown_type $needle
  21. */
  22. function isInString2($haystack, $needle) {
  23. $array = explode($needle, $haystack);
  24. return count($array) > 1;
  25. }
  26. /**
  27. * 用了一下正则,这种方法十分不建议,尤其是 $needle 中包含
  28. * 特殊字符,如 ^,$,/ 等等
  29. * @param unknown_type $haystack
  30. * @param unknown_type $needle
  31. */
  32. function isInString3($haystack, $needle) {
  33. $pattern = '/' . $needle . '/';
  34. return (bool)preg_match($pattern, $haystack);
  35. }
  36. /**
  37. * 利用一下 strpos() 函数
  38. * @param unknown_type $haystack
  39. * @param unknown_type $needle
  40. */
  41. function isInString4($haystack, $needle) {
  42. return false !== strpos($haystack, $needle);
  43. }
  44. //测试
  45. $haystack = 'I am ITBDW';
  46. $needle = 'IT';
  47. 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. echo strstr("Hello world!","world");
  2. ?>
复制代码

//输出:world!

例2,在本例中,我们将搜索 "o" 的 ASCII 值所代表的字符:

  1. echo strstr("Hello world!",111);
  2. ?>
复制代码

//输出:o world!

例3:

  1. $email = 'admin@jbxue.com';

  2. $domain = strstr($email, '@');
  3. echo $domain; // prints @jbxue.com
  4. $user = strstr($email, '@', true); // As of PHP 5.3.0

  5. echo $user; // prints admin
  6. ?>
复制代码

  1. $city_str=fopen(cgi_path."/data/weather/city.dat","r");

  2. $city_ch=fread($city_str,filesize(cgi_path."/data/weather/city.dat"));
  3. $city_ch_arr=explode("|",$city_ch);
  4. //如果能匹配到所在市
  5. if(strstr($area_ga,"市")){
  6. foreach($city_ch_arr as $city_ch_arr_item){
  7. if(@strstr($area_ga,$city_ch_arr_item)){
  8. echo $area_ga.'
    ';
  9. echo $city_ch_arr_item;
  10. $s_city=$city_ch_arr_item;
  11. }
  12. }
  13. }
  14. //如果找不到市 那么看看是不是能找到省 有时会有这样的情况:广东省长城宽带 这样的一律归属到该省省府
  15. elseif(strstr($area_ga,"河北")!==false){
  16. $s_city="石家庄";
  17. }elseif(strstr($area_ga,"福建")!==false){
  18. $s_city="福州";
  19. }elseif(strstr($area_ga,"*")!==false){
  20. $s_city="台北";
  21. }elseif(strstr($area_ga,"香港")!==false){
  22. $s_city="香港";
  23. }elseif(strstr($area_ga,"广西")!==false){
  24. $s_city="南宁";
  25. }elseif(strstr($area_ga,"浙江")!==false){
  26. $s_city="杭州";
  27. }elseif(strstr($area_ga,"江苏")!==false){
  28. $s_city="南京";
  29. }elseif(strstr($area_ga,"山东")!==false){
  30. $s_city="济南";
  31. }elseif(strstr($area_ga,"安徽")!==false){
  32. $s_city="合肥";
  33. }elseif(strstr($area_ga,"湖南")!==false){
  34. $s_city="长沙";
  35. }elseif(strstr($area_ga,"四川")!==false){
  36. $s_city="成都";
  37. }elseif(strstr($area_ga,"云南")!==false){
  38. $s_city="昆明";
  39. }elseif(strstr($area_ga,"广东")!==false){
  40. $s_city="广州";
  41. }elseif(strstr($area_ga,"贵州")!==false){
  42. $s_city="贵阳";
  43. }elseif(strstr($area_ga,"*")!==false){
  44. $s_city="拉萨";
  45. }elseif(strstr($area_ga,"*")!==false){
  46. $s_city="乌鲁木齐";
  47. }elseif(strstr($area_ga,"蒙古")!==false){
  48. $s_city="呼和浩特";
  49. }elseif(strstr($area_ga,"黑龙江")!==false){
  50. $s_city="哈尔滨";
  51. }elseif(strstr($area_ga,"辽宁")!==false){
  52. $s_city="沈阳";
  53. }elseif(strstr($area_ga,"吉林")!==false){
  54. $s_city="长春";
  55. }elseif(strstr($area_ga,"河南")!==false){
  56. $s_city="郑州";
  57. }elseif(strstr($area_ga,"湖北")!==false){
  58. $s_city="武汉";
  59. }elseif(strstr($area_ga,"山西")!==false){
  60. $s_city="太原";
  61. }elseif(strstr($area_ga,"陕西")!==false){
  62. $s_city="西安";
  63. }elseif(strstr($area_ga,"甘肃")!==false){
  64. $s_city="兰州";
  65. }elseif(strstr($area_ga,"宁夏")!==false){
  66. $s_city="银川";
  67. }elseif(strstr($area_ga,"海南")!==false){
  68. $s_city="海口";
  69. }elseif(strstr($area_ga,"江西")!==false){
  70. $s_city="南昌";
  71. }elseif(strstr($area_ga,"澳门")!==false){
  72. $s_city="澳门";
  73. }
  74. //如果都不存在 就是默认显示广州 比如本地机
  75. else{
  76. $s_city="广州";
  77. }
复制代码

如上代码: 其中 city.dat中是一些城市,格式类似这样: 广州|深圳|汕头|惠州|珠海|揭阳|佛山|河源|阳江|茂名|湛江|梅州|肇庆|韶关|潮州|东莞|中山|清远|江门|汕尾|云浮|增城|从化|乐昌|南雄|台山|开平|鹤山|恩平|廉江|雷州|吴川|高州|化州|高要|四会|兴宁|陆丰|阳春|英德|连州|普宁|罗定|北京|天津|上海|重庆|乌鲁木齐|克拉玛依|石河子|阿拉尔|图木舒克|五家渠|哈密|吐鲁番|阿克苏|喀什|和田|伊宁|塔城|阿勒泰|奎屯|博乐|昌吉|阜康|库尔勒|阿图什|乌苏|拉萨|日喀则|银川|石嘴山|吴忠|固原|中卫|呼和浩特|包头|乌海|赤峰|通辽|鄂尔多斯|呼伦贝尔|巴彦淖尔|乌兰察布|霍林郭勒|满洲里|牙克石|扎兰屯|根河|额尔古纳|丰镇|锡林浩特|二连浩特|乌兰浩特|

参考

  1. echo strstr('aaaaaaaaaaaboaaaaaaaaaaaaboxcccccccccbcccccccccccccc','box')."
    \n";
  2. //输出boxcccccccccbcccccccccccccc
  3. // 完整匹配中间的box 不因前而的b而停止
  4. echo strstr('aaaaaaAbaaa aaaa aaaaaaaaaboxccccccccccccboxccccccccccc','box')."
    \n";
  5. //输出boxccccccccccccboxccccccccccc
  6. // 有两个关键字时, 遇到第一个停止.
  7. echo strstr('Subscrtibe our to free newsletter about New Freew to','to')."
    \n";
  8. //输出to free newsletter about New Freew to
  9. ?>
复制代码