如果在字符串中找到某个单词,我希望只执行一个字符条,所以如果单词数字与正则表达式匹配,它将执行一个条带所有实际数字0-9或preg将它们替换为空,BTW数字将始终包含在“”中。将这两个功能放在一起的最佳方法是什么?一个例子是,如果数据是人,数字很有趣! “123ABC”它将归还Man,数字很有趣! “ABC”如果数字不存在,则忽略它们。
答案 0 :(得分:2)
我觉得这里的一些答案过于复杂。也许这只是我,但这应该是你所需要的:
if (stripos($str, 'numbers') !== false) {
$str = preg_replace('/\d/', '', $str);
}
编辑:如果您只想要引号内的数字,您可以使用正则表达式进行操作,但我肯定会这样做:
if (stripos($str, 'numbers') !== false) {
$arr = explode('"', $str);
for ($i = 1; $i < count($arr); $i += 2) {
$arr[$i] = preg_replace('/\d/', '', $arr[$i]);
}
$str = implode('"', $arr);
}
答案 1 :(得分:1)
如果我正确理解了这个问题,可能就像:
if (strpos($string, "numbers") !== false) {
$string = preg_replace('/"\d+"/', '', $string);
}
答案 2 :(得分:0)
您可以使用strpos函数首先检查字符串。
像
这样的东西 if(strpos($mystr,"Some value")!==false)
{
/*preg_replace here.*/
}
答案 3 :(得分:0)
@Ryan Cooper:试试 -
$input = 'Man, Numbers are fun! "123ABC"';
echo stripnums("Numbers", $input);
function stripnums($needle, $haystack)
{
if (stripos($haystack, $needle) !== 0)
{
return preg_replace('/[0-9]/', '', $haystack);
}
}
答案 4 :(得分:0)
这样的事情对你有用:
$str = 'Man, Numbers are fun! "123ABC"';
var_dump(preg_replace_callback("(.*\bNumbers\b.*)",
create_function(
'$matches',
'return preg_replace("/(\"[^\d]*)\d+(.*\")/", "$1$2", $matches[0]);'
),
$str));
OUTPUT:
string(27) "Man, Numbers are fun! "ABC""
\ bNumbers \ b会确保将单词Numbers
与单词边界匹配,以便xyzNumbers
和Numbersxyz
不匹配。