php - 替换 php 正则表达式中引号之间的部分字符串

标签 php regex substring quotes double-quotes

现在我掌握了非常基本的正则表达式技能,只用了几次正则表达式来处理基本的东西。之前可能有人问过这个问题,对此我深表歉意,但我找不到任何答案。发现类似的,虽然并试图适应它但无济于事。 好的,回到问题 - 如何仅替换某些字符(在本例中为双引号)之间的空格?

假设我有以下字符串:

"mission podcast" modcast A B C "D E F"

我想替换missionpodcast之间的空格以及DE之间的空格& F 同时保持其他不变。

附言如果空间是一个字符串怎么办?也欢迎举个例子。

对此进行了一些编辑,我希望它现在更清楚了。 编辑 2:我需要在 php 中的字符串上执行此操作并在 shell 中执行它。 编辑 3:对不起,我把整个问题改了 3 次,只是我自己很困惑。干杯!

最佳答案

描述

我会通过首先将字符串分成多组带引号或不带引号的字符串来解决这个问题。

然后遍历匹配项,如果捕获组 1 已填充,则该字符串被引用,因此只需对替换捕获组 0 进行简单替换。如果捕获组 1 未填充,则跳至下一个匹配项。

在每次迭代中,您只想构建一个新字符串。

因为分割字符串是困难的部分,我会使用这个正则表达式:

("[^"]*")|[^"]*

enter image description here

例子

示例文本

"mission podcast" modcast A B C "D E F"

代码

PHP Code Example: 
<?php
$sourcestring="your source string";
preg_match_all('/("[^"]*")|[^"]*/i',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>

捕获组

$matches Array:
(
    [0] => Array
        (
            [0] => "mission podcast"
            [1] =>  modcast A B C 
            [2] => "D E F"
            [3] => 
        )

    [1] => Array
        (
            [0] => "mission podcast"
            [1] => 
            [2] => "D E F"
            [3] => 
        )

)

PHP 示例

此 php 脚本将仅替换带引号的字符串中的空格。

工作示例:http://ideone.com/jBytL3

代码

<?php

$text ='"mission podcast" modcast A B C "D E F"';

preg_match_all('/("[^"]*")|[^"]*/',$text,$matches);

foreach($matches[0] as $entry){
    echo preg_replace('/\s(?=.*?")/ims','~~new~~',$entry);
    }

输出

"mission~~new~~podcast" modcast A B C "D~~new~~E~~new~~F"

关于php - 替换 php 正则表达式中引号之间的部分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17431820/

相关文章:

java - 当数字是随机时捕获子字符串中的不同值 - Selenium Java

r - 使用R从字符串中提取特定格式的子字符串(ID、代码)

php - 使用 PHPExcel 导出时,MySQL 数据仅在一列中导出到 Excel

php - MySQL 使用上次打开的连接

PHP - 通过引用传递可变数量的参数

php - 多次使用 MySQL 结果数组

javascript - 正则表达式每个点换行,但仅在引号之外

php - 从 Google Analytics 获取所有数据

另一个正则表达式的 Java 正则表达式列表

regex - 从逗号分隔文件中删除多余的逗号