Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何仅使用preg_replace检查模式是否匹配_Php_Regex - Fatal编程技术网

Php 如何仅使用preg_replace检查模式是否匹配

Php 如何仅使用preg_replace检查模式是否匹配,php,regex,Php,Regex,目前,我有以下代码,用于执行模式匹配和模式替换 <?php function fun($text) { if (preg_match("/^(ATE|EAT)\s+(\S+).*/", $text)) { $text = preg_replace("/^(ATE|EAT)\s+(\S+).*/", "EAT $2", $text); } else { $text = preg_replace("/.*(ATE|EAT).*/", "EAT"

目前,我有以下代码,用于执行模式匹配和模式替换

<?php

function fun($text) {
    if (preg_match("/^(ATE|EAT)\s+(\S+).*/", $text)) {
        $text = preg_replace("/^(ATE|EAT)\s+(\S+).*/", "EAT $2", $text);
    } else {
        $text = preg_replace("/.*(ATE|EAT).*/", "EAT", $text);
    }
    return $text;
}

// EAT pizza
echo fun('EAT pizza') . "\n";

// EAT pizza
echo fun('EAT pizza at paris') . "\n";

// EAT
echo fun('I EAT pizza at paris') . "\n";
但是,
fun('EAT pizza')
将失败,因为它将打印出
EAT
,而不是预期的
EAT pizza


是否有一种正确的方法来优化上述代码?

我想你真正想要的是知道如何知道在你的preg_中是否有替换,因为你实际上想要实现什么还不清楚

从以下的PHP文档:

说明

混合预替换(混合$pattern,混合$replacement,混合$subject[,int$limit=-1[,int&$count]]))

[……]

计数

如果指定,此变量将填充已完成的替换数

因此,如果您在preg_replace中添加一个计数,您将得到替换的数量,从而得到发生的数量

给出的示例(由于缺乏信息,这有点出乎意料):


因此,这将用
EAT
替换
ATE
EAT
,或者,如果两者都没有找到,它将尝试用
EAT

替换
ATE
EAT
,我想你真正需要的是知道如何知道你的preg\u中是否有替换,因为你实际上想要实现的目标还不清楚

从以下的PHP文档:

说明

混合预替换(混合$pattern,混合$replacement,混合$subject[,int$limit=-1[,int&$count]]))

[……]

计数

如果指定,此变量将填充已完成的替换数

因此,如果您在preg_replace中添加一个计数,您将得到替换的数量,从而得到发生的数量

给出的示例(由于缺乏信息,这有点出乎意料):


因此,这将用
EAT
替换
ATE
EAT
,或者,如果两者都没有找到,它将尝试用
EAT

替换
ATE
EAT
,我想你真正需要的是知道如何知道你的preg\u中是否有替换,因为你实际上想要实现的目标还不清楚

从以下的PHP文档:

说明

混合预替换(混合$pattern,混合$replacement,混合$subject[,int$limit=-1[,int&$count]]))

[……]

计数

如果指定,此变量将填充已完成的替换数

因此,如果您在preg_replace中添加一个计数,您将得到替换的数量,从而得到发生的数量

给出的示例(由于缺乏信息,这有点出乎意料):


因此,这将用
EAT
替换
ATE
EAT
,或者,如果两者都没有找到,它将尝试用
EAT

替换
ATE
EAT
,我想你真正需要的是知道如何知道你的preg\u中是否有替换,因为你实际上想要实现的目标还不清楚

从以下的PHP文档:

说明

混合预替换(混合$pattern,混合$replacement,混合$subject[,int$limit=-1[,int&$count]]))

[……]

计数

如果指定,此变量将填充已完成的替换数

因此,如果您在preg_replace中添加一个计数,您将得到替换的数量,从而得到发生的数量

给出的示例(由于缺乏信息,这有点出乎意料):


因此,这将用
EAT
替换
ATE
EAT
,或者,如果两者都没有找到,它将尝试用
EAT
替换
ATE
EAT
,尝试以下功能:

function fun($text) {
    $tmp = str_replace('ATE', 'EAT', $text);
    $pos = strpos($text, 'EAT');

    if ($pos < 0) {
        return $text;
    } else if ($pos > 0) {
        $tmp = preg_replace('/^.*?EAT/', 'EAT', $tmp);
    }

    $tmp = preg_replace("/^EAT\s+(\S+).*/", "EAT $2", $tmp);

    return $tmp;
}
函数乐趣($text){
$tmp=str_replace('ATE','EAT',$text);
$pos=strpos($text,'EAT');
如果($pos<0){
返回$text;
}否则如果($pos>0){
$tmp=preg_replace(“/^.*?EAT/”、“EAT”、$tmp);
}
$tmp=preg_replace(“/^EAT\s+(\s+).*/”、“EAT$2”、$tmp);
返回$tmp;
}

尝试以下功能:

function fun($text) {
    $tmp = str_replace('ATE', 'EAT', $text);
    $pos = strpos($text, 'EAT');

    if ($pos < 0) {
        return $text;
    } else if ($pos > 0) {
        $tmp = preg_replace('/^.*?EAT/', 'EAT', $tmp);
    }

    $tmp = preg_replace("/^EAT\s+(\S+).*/", "EAT $2", $tmp);

    return $tmp;
}
函数乐趣($text){
$tmp=str_replace('ATE','EAT',$text);
$pos=strpos($text,'EAT');
如果($pos<0){
返回$text;
}否则如果($pos>0){
$tmp=preg_replace(“/^.*?EAT/”、“EAT”、$tmp);
}
$tmp=preg_replace(“/^EAT\s+(\s+).*/”、“EAT$2”、$tmp);
返回$tmp;
}

尝试以下功能:

function fun($text) {
    $tmp = str_replace('ATE', 'EAT', $text);
    $pos = strpos($text, 'EAT');

    if ($pos < 0) {
        return $text;
    } else if ($pos > 0) {
        $tmp = preg_replace('/^.*?EAT/', 'EAT', $tmp);
    }

    $tmp = preg_replace("/^EAT\s+(\S+).*/", "EAT $2", $tmp);

    return $tmp;
}
函数乐趣($text){
$tmp=str_replace('ATE','EAT',$text);
$pos=strpos($text,'EAT');
如果($pos<0){
返回$text;
}否则如果($pos>0){
$tmp=preg_replace(“/^.*?EAT/”、“EAT”、$tmp);
}
$tmp=preg_replace(“/^EAT\s+(\s+).*/”、“EAT$2”、$tmp);
返回$tmp;
}

尝试以下功能:

function fun($text) {
    $tmp = str_replace('ATE', 'EAT', $text);
    $pos = strpos($text, 'EAT');

    if ($pos < 0) {
        return $text;
    } else if ($pos > 0) {
        $tmp = preg_replace('/^.*?EAT/', 'EAT', $tmp);
    }

    $tmp = preg_replace("/^EAT\s+(\S+).*/", "EAT $2", $tmp);

    return $tmp;
}
函数乐趣($text){
$tmp=str_replace('ATE','EAT',$text);
$pos=strpos($text,'EAT');
如果($pos<0){
返回$text;
}否则如果($pos>0){
$tmp=preg_replace(“/^.*?EAT/”、“EAT”、$tmp);
}
$tmp=preg_replace(“/^EAT\s+(\s+).*/”、“EAT$2”、$tmp);
返回$tmp;
}

您的功能想要实现什么?如果您总是希望字符串为“EAT pizza”,那么只要将其设置为“如果preg_match为真”,您想用函数实现什么?如果您总是希望字符串为“EAT pizza”,那么只要将其设置为“如果preg_match为真”,您想用函数实现什么?如果您总是希望字符串为“EAT pizza”,那么只要将其设置为“如果preg_match为真”,您想用函数实现什么?如果你总是