PHP preg_replace指向破折号后的数字

时间:2017-06-30 13:08:29

标签: php preg-replace

您好我试图替换字符串中的所有数字或数字,除了用空格划分后的数字

例如我有这个:

$string = "1234 Example-1234";

我想只有"例子-1234"

我尝试preg_replace('/\-?\d+/','',$string);,但偶数后的数字被替换

编辑:谢谢大家,我尝试了你所有的答案,而且效果很好!

4 个答案:

答案 0 :(得分:0)

因为您正在寻找包含短划线的单词,您可以通过空格分割字符串,遍历数组值直到找到带短划线的字符串,然后输出来实现此目的从那以后。

enum var_type {
    vt_float
,   vt_double
,   vt_int
,   vt_long
};
struct mystruct {
    int id,
    var_type type;
    void *ptr_to_var,
    float conversion
};
...
{
    {0x01, vt_float, &var_1,  0.4}
,   {0x05, vt_int,   &var_2,  0.2}
} 

这将输出$string = "1234 Example-1234"; $words = explode(" ", $string); foreach($words as $word) { if (strpos($word, '-') !== false) { echo $word; break; // delete this line if there are multiple instances of words with dashes in your string } }

您可以看到working example here

答案 1 :(得分:0)

如果您想跳过前面带有-的所有数字并删除所有其他数字,请使用

'~-\d+(*SKIP)(*F)|\d+~'

请参阅regex demo

请注意,您希望修剪结果或在\s*模式周围添加\d+

模式详情

  • -\d+(*SKIP)(*F) - 匹配-,1位数并跳过此匹配
  • | - 或
  • \d+ - 一位或多位

请参阅PHP demo

$str = '1234 Example-1234';
$res = preg_replace('/-\d+(*SKIP)(*F)|\s*\d+/', '', $str);
echo trim($res); // => Example-1234

答案 2 :(得分:0)

使用正则表达式负面后瞻断言的解决方案 (?<!a)b

$str = "1234 Example-1234";
$str = preg_replace('/(?<![0-9-])\d+/', '', $str);    

print_r($str);

输出:

Example-1234

答案 3 :(得分:0)

  

ONLINE Regex测试人员: https://regex101.com/r/ykUWfM/3

<?php

$string = "1234 Example-1234";

echo preg_replace('/-(\d+)/','',$string);

?>
  在-转换为字符串

之前

OUTPUT:

1234 Example

注意:在-之前,它会在dash -

之前获取字符串
  

  

演示: https://regex101.com/r/ykUWfM/2

<?php

$string = "1234 Example-1234";

echo preg_replace('/(?<![0-9-])\s*\d+/','',$string);

?>
  

输出:

Example-1234