以英文逗号作为分隔符,使用explode把字符串切割为数组

为了不影响分割,当值含有英文逗号时,需要在两侧加双引号(如:"a,b"),且值不能包含双引号

需要实现:分割后保持双引号中内容的完整性

$text = "小张,13006701576,\"123@163.com\",1,\"繁體字,测试,测试222\",test,user"; 预期得到数组: $arr = array( "小张", "13006701576", "123@163.com", "繁體字,测试,测试222", "test", "user" 1、使用表达式|\"(.*?)\"|匹配字符串中使用括号括起来的内容 2、使用表达式/,/把双引号内容的英文逗号替换为%comma%,再以英文逗号使用explode分割 3、分割完成后,循环数组,使用str_replace把内容中的%comma%替换回英文逗号 $text = "小张,13006701576,\"123@163.com\",1\"繁體,字,测试,测试222\",test,user"; $string = preg_replace_callback( "|\"(.*?)\"|", function ($matches) { return preg_replace("/,/", "%comma%", $matches[1]); $text); $arr = explode(",", $string); foreach ($arr as &$item){ $item = str_replace("%comma%", ",", $item); echo json_encode($arr); $preg= '/xue[\s\S]*?om/i'; preg_match_all($preg,"学并思网址xuebingsi.com",$res); var_dump($res[0][0]); 以上这篇 PHP 匹配 到2个 字符串 之间的 内容 方法就是小编分享给大家的全部 内容 了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文章: php 则去掉  空格  与 php 则表达式 使用 方法整理集合 PHP 常用 则表达式精选(推荐) PHP 则表达式处理函数(PCRE 函数)实例小结 我试图 匹配 {bracket}之间的所有文本,但是如果它在引号 则不是:例如:$str =’我想要的价值,与价值“我做{不}想要”我的结果应该抢夺“想要”,但省略“不”.我已经拼命搜索了stackoverflow的 则表达式,可以执行此操作,没有运气.我已经看到了答案,允许我在引号之间但不在引号之间和 得到文本.这甚至可能吗?如果是这样,它是如何完成的?到目前为止,这就是我所拥有的:preg_m... 我们在做 字符串 拼接的时候,有多种方式,最常用的莫过于 使用 单引号和 双引号 拼接了,当让sprintf()也用的比较多,但每次在 使用 单引号和 双引号 时,总会纠结 使用 哪一种方式,不知道你们有没有纠结过,所以今天来仔细研究下。单引号我们先来看个单引号的例子:$s = 'world';echo 'hello ' . $s; // hello worldecho 'hello $s'; // hello $s从上... 1、定义 字符串 PHP 字符串 的定义可以 使用 单引号,也可以 使用 上引号。但是必须 使用 同一种单或 双引号 来定义 字符串 ,如:‘Hello"和“Hello'为非法的 字符串 定义。   定义 字符串 时,只有一种引号被视为定义符,即单引号或 双引号 。于是,如果一个 字符串 双引号 开始,那么只有 双引号 被分析器解析。这样,你就可以在 双引号 包含任何其他字符,甚至单引号。下面的引号串都是合法的: PHP 单引号和 双引号 具有不同的含义,最大的几项区别如下:单引号 ,任何变量($var)、特殊转义字符(如“/t /r /n”等)不会被解析,因此 PHP 的解析速度更快,转义字符仅仅支持“/’”和“//”这样对单引号和反斜杠本身的转义; 双引号 ,变量($var)值会代入 字符串 ,特殊转义字符也会被解析成特定的单个字符,还有一些专门针对上述两项特性的特殊功能性转义,例如“/$”和“{ 为了 匹配 文字上的反斜杠,许多人和 PHP 手册都说:总是这样对它进行三倍转义\\\\注意事项 :单引号和 双引号 PHP 字符串 具有反斜杠的特殊含义。因此,如果\必须与 则表达式 匹配 \\,则必须在 PHP 代码 使用 "\\\\"或'\\\\'。这是一个示例 字符串 : \test$test = "\\test"; // outputs \test;// WON'T WORK: pattern in double-... 基本上,我需要一个 则表达式来 匹配 PHP 标记内的所有 双引号 字符串 ,而内部没有变量。这是我到目前为止的 内容 :"([^\$]*?)"(?![\w ]*')并替换为:'$1'但是,这也将 匹配 PHP 标记之外的 内容 ,例如HTML属性。示例案例:Here's my"dog's website"$somevar ="someval";$somevar2 ="someval's got a quote insid... // 取出所有"" 间的 内容 则如下Pattern pattern1 = Pattern.compile("(?<=\")([\\S]+?)(?=\")");这里取得是string 双引号 间的 内容 ,可以根据需求自己修改,比如取[] 间的 内容 则可以修改成(?<=\")([\\[]+?)(?=\]) 如果只 匹配 文,可以改成(?<=\")([\u4e00-\u9fa5]+?)... PHP 单引号及 双引号 均可以修饰 字符串 类型的数据,如果修饰的 字符串 含有变量(例$name);最大的区别是: 双引号 会替换变量的值,而单引号会把它当做 字符串 输出。例如: ... 如果想 匹配 如 .,{,$,等特殊字符(在 则表达式 有特殊意义的字符),就必须在该字符前加反斜杠(\),(C 管它\叫‘转义符’)如果想表示这个反斜杠(\),就在他前面再加个反斜杠,即改成(\\)。 必须注意的是在 PHP 要尽量把 则表达式放在单引号(') 。如果把 则表达式放在 双引号 里则会引起一些不必要的麻烦。在 PHP 则表达式 也要 使用 反斜杠(\)来‘掩盖’一些特殊的字符--像反斜杠(\ 需要处理的 字符串 [{columnDisplaySize=8, columnName=WARD_CODE, columnTypeName=varchar}, {columnDisplaySize=11, columnName=BED_NO, columnTypeName=int},[{columnDisplaySize=8, columnName=WARD_CODE, columnTypeName=... 匹配 表达式:\"([^\"]*)\" 匹配 结果实验: String t = "\"world\""; String p = "\"([^\"]*)\"" ; Pattern P=Pattern.compile(p);      Matcher matcher1=P.matcher(t);     if(matcher1.find())