在字符串中查找单词,并递增后面的整数

时间:2013-11-27 20:47:30

标签: php regex system contact

这是我的联系人系统。

邮件主题可以是:Hello Friend.RE^2 Hello Friend

我需要使用代码查找主题是否有RE^{int} {subject},如果有的话,请{.1}}。

如果不是:而不是RE^{++int} {subject}

RE^2 {subject}

2 个答案:

答案 0 :(得分:4)

您可以将REGEX与preg_match一起使用,以查找如下编号:

$str = "RE^3 Hello Friend";
preg_match( '/RE\^(\d*)/', $str , $m);
print_r( $m );

$number = $m[ 1 ]

最终结果可能是:

$subject = "Hello Friend";
preg_match( '/RE\^(\d*)/', $subject , $m);

if ( empty ( $m )  ) 
    $newSubject = "RE^2 Hello Friend";
else{
    $number = $m[ 1 ] + 1;
    $newSubject = "RE^$number Hello Friend";
}
echo $newSubject;

在此处回答您的评论是更改后的代码:

$subject = "Hello AbuRomaissae";

if ( !preg_match( '/RE\^(\d*)/', $subject , $m)  ) 
    $newSubject = "RE^2 $subject";
else{
    $number = $m[ 1 ] + 1;
    $newSubject = "RE^$number ".preg_replace( '/RE\^(\d*) /', "", $subject);
}
echo $newSubject;

答案 1 :(得分:0)

此解决方案使用preg_replace_callback,以便您可以使用函数来处理替换。

$subject = 'Hello Friend';
$subject = 'RE^2 Hello Friend';

$subject = preg_replace_callback('/RE\^(\d*)/', 'myFunc', $subject);
function myFunc($matches) {
  $x = ++$matches[0];
  return $x;
}

if (!preg_match('/RE\^\d*/', $subject)) { //if "RE^\d" is missing, add "RE^2"
  $subject = "RE^2 {$subject}";
}

echo $subject; //'RE^3 Hello Friend'