如何用字符串中的连字符替换所有数字?

时间:2015-12-17 01:48:11

标签: php regex

我通过一个例子来解释我的问题:

示例:

(英文版)

$str = '1 healthy, fine, sound 2 tip-top, fit, robust, sturdy & 1  substandard, poor';

我想要这个输出:

- healthy, fine, sound
- tip-top, fit, robust, sturdy
&
- substandard, poor

(波斯语版) - 从右侧开始

$str ='1 خشكاندن، خشكانيدن 2رطوبتزدايي كردن، نمزدايي كردن & تر کردن';

我想要这个输出:

- خشكاندن، خشكانيدن
- رطوبتزدايي كردن، نمزدايي كردن
&
تر کردن

我知道,在这个例子中1真的很模糊。但实际上它是右边的第一个角色。但是在SO中,因为没有正确的波斯方向,1在左边。

注意:也许没有数字,甚至没有&。在这种情况下,我不想要任何改变..!

$str = 'healthy, fine, sound, tip-top'; // I want this: healthy, fine, sound, tip-top


$str = 'healthy, fine, sound & poor'; /* I want this: healthy, fine, sound
                                                      &
                                                       poor
                                      */

我可以使用多个str_replace()来做到这一点。但我想知道,我可以使用REGEX吗?

2 个答案:

答案 0 :(得分:3)

此脚本适用于英语和英语。波斯变种。

<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8">
  <title>Check SQL Server Connection</title>
 </head>
 <body>
   <?php
     $serverName = "IT90334\SQLEXPRESS";
     $connectionInfo = array('Database' => 'AdventureWorks');
     $conn = sqlsrv_connect($serverName, $connectionInfo);

     if ($conn) {
       echo "Connection Established.<br />";
     } else {
       echo "Something went wrong while connecting to MSSQL.<br />";
       die(print_r(sqlsrv_errors(), true));
     }

     $query = "SELECT Name FROM production.Location"; -- HERE
     $result = sqlsrv_query($conn, $query)
        or die('An error has occurred');

     $rowcount = sqlsrv_num_rows($result);

     if($rowcount === FALSE){
       echo "failure";
     }
     else {
       echo $rowcount;
     }

     if($result === FALSE){
       die(print_r(sqlsrv_errors(), true));
     }
     else {
       echo "Results returned. <br />"; -- HERE
     }

     sqlsrv_close($conn);

  ?>
  </body>
</html> 

答案 1 :(得分:1)

我没有测试过Persian变体,因为我没有使用RTL脚本的经验,但它应该适用于英语示例。

// first let's put all the numbers to a new line
$digit_split_str = preg_replace('/(?<!^)(?=\d)/', "\n", $str);
// then ampersands
$ampersand_split_str = preg_replace('/(?<!^)&/', "\n&\n", $digit_split_str);
// then let's replace the numbers at the start of the string with dashes
$dashed_str = preg_replace('/^\d+/m', "- ", $ampersand_split_str);

编辑:在&符号和换行符周围固定角落案例......