您好我试图替换字符串中的所有数字或数字,除了用空格划分后的数字
例如我有这个:
$string = "1234 Example-1234";
我想只有"例子-1234"
我尝试preg_replace('/\-?\d+/','',$string);
,但偶数后的数字被替换
编辑:谢谢大家,我尝试了你所有的答案,而且效果很好!
答案 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 -
或强>
<?php
$string = "1234 Example-1234";
echo preg_replace('/(?<![0-9-])\s*\d+/','',$string);
?>
输出:
Example-1234