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为真”,您想用函数实现什么?如果你总是