【问题标题】:PHP replace stringPHP替换字符串
【发布时间】:2010-08-10 00:41:42
【问题描述】:

$name(字符串)给出类似(可能的值):

John II, Litten Draw

我们应该分两步更新$name

  1. 捕捉第一个逗号之前的单词并将它们扔到字符串的末尾
  2. 删除第一个逗号
  3. 创建一个文件 current_name.txt(或者如果已经存在则更新)并把$name的源扔给它

“John II, Litten Draw”应替换为“Litten Draw John II”。

谢谢。

【问题讨论】:

  • 这些名称是否来自“current_name.txt”文件? (如果是的话,它们是每行一个吗?)
  • 这是家庭作业吗?
  • @Fernando 不,这是对stackoverflow.com/questions/3440442/php-external-page的跟进
  • @middaparka $name 总是只有一个名字(它是一个字符串,而不是一个数组)。

标签: php string


【解决方案1】:

像这样?

$split = explode(",", $name, 1);
$name = trim($split[1]) . " " . trim(split[0]);

那就是basic file I/O

如果你有一个单词列表(假设它们都在不同的行上):

$list = explode("\n", $names);
$nnames = "";
foreach($list as $name)
{
        $split = explode(",", $name);
        $nnames .= trim($split[1]) . " " . trim(split[0]) . "\n";
}

【讨论】:

  • file_put_contents = 将字符串转储到文件的简单方法
  • @Ignatz:不。这适用于一对单词。我将更新以使用由换行符 (\n) 分隔的列表。
  • @Josh K 似乎是一个误解。抱歉,已更新问题
  • 它在哪里说他想要使用正则表达式?还将您的答案 Josh 更新为 split(",", $name, 1),这样它只会拆分第一个逗号
  • @stereofog:这里不需要正则表达式。
【解决方案2】:

这个正则表达式应该为你做......

preg_replace('#\\b(\\w+),\\s*(\\w+)\\b#', '\\2 \\1', $string);

基本上,它在寻找:

  1. 单词边界(\\b 部分)
  2. 然后是一个或多个单词字符(\\w+ 部分)
  3. 然后是逗号,后跟零个或多个空格字符 (,\\s*)
  4. 然后是一个或多个单词字符(\\w+ 部分)
  5. 最后,另一个词边界...

【讨论】:

  • 你能解释一下“这不起作用”是什么意思吗?我在我的机器上试过了,效果很好……
【解决方案3】:

正则表达式是这里的路

$a = "Obama, Barak";
echo preg_replace('~(\w+)\W+(\w+)~', "$2 $1", $a);

也适用于多个名称:

$a = "
Obama, Barak
Federer, Roger
Dickens, Charles
";

echo preg_replace('~(\w+)\W+(\w+)~', "$2 $1", $a);

【讨论】:

    【解决方案4】:

    下面是一些应该可以正常工作的示例代码:

    <?php
    
        function getCanonicalName($name) {
    
            // Check for the existance of a comma and swap 'elements' if necessary.
            if(strpos($name, ',') !== false) {
                list($surname, $forename) = explode(',', $name);
                $name = $forename . ' ' . $surname; 
            }
    
            // Trim the name.
            return trim($name);
        }   
    
    
        // Test data and file I/O.
        $outputData = '';
        $testData = array('Obama, Barak', 'Federer, Roger', 'John Parker');
    
        foreach($testData as $name) {
            $outputData .= getCanonicalName($name) . "\n";
        }
    
    
        file_put_contents('current_name.txt', $outputData, FILE_APPEND);
    ?>
    

    顺便说一句,如果 $name 中有多个逗号,这(就像当前附加到您的问题的所有解决方案一样)将导致数据丢失。因此,如果可能的话,您应该更新 getCanonicalName 以应对这种可能性。

    【讨论】:

      【解决方案5】:

      查看strpos 查找逗号,查看ltrim 删除空格,查看fopen 模式a 附加到文件。您也可以使用explode 来分隔逗号,这通常更容易

      【讨论】:

      • 你不需要找逗号。拆分、修剪、重新组合。
      • @Josh 好吧,explode 也在“寻找逗号”,只是不是手动的。我也更喜欢explode,但我试图把他要的子弹给他
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 2020-05-15
      • 1970-01-01
      • 2013-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多