我有一个看起来像这样的PHP字符串
$string = 'This is day 7 of the task';
该数字会根据当周发生的事情而变化,因此我尝试使用if语句来检查已设置的数字
if ($string == 'This is day 7 of the task') {
echo 'Task day is set to a number';
}
我现在想要匹配它,无论数字是什么,我最好的方法是什么,正则表达式?
这样的事可能吗?
$string = 'This is day 7 of the task';
$isAMatch = preg_match("/This is day \(\d)+\ of the task\/", $string);
答案 0 :(得分:2)
你确实可以这样做:
if (preg_match("/^This is day [0-9]+ of the task$/", $string)) {
echo 'Task day is set to a number';
}
^
表示"以"开头并且$
表示"以"结尾。如果您的字符串在开头或结尾可以包含其他字符,请将其删除。
答案 1 :(得分:1)
您的实际正则表达式不起作用,因为您正在转义括号\(
和最后一个分隔符\/
。如果您不必获取该号码,可以使用:
$string = 'This is day 7 of the task';
$isAMatch = preg_match('~This is day \d+ of the task~', $string);
如果您想获得该号码,可以添加一个捕获组:
$string = 'This is day 7 of the task';
$isAMatch = preg_match('~This is day (\d*) of the task~', $string, $matches);
if ($isAMatch) {
echo $matches[1]; // 7
}
答案 2 :(得分:1)
正如你所说的那样,可以使用正则表达式:
<?php
$string = 'This is day 7 of the task';
preg_match('~[0-9]~', $string, $matches);
var_dump($matches);
输出:
array(1) {
[0]=>
string(1) "7"
}
现在您可以跟进
if(count($matches) > 0) {
echo $matches[0]; // 7
}
答案 3 :(得分:0)
在我看来,没有必要使用正则表达式 你可以str_replace字符串中的单词,你剩下的是数字。
这可以在以后用于比较每天会发生的事情。
$string = 'This is day 7 of the task';
$arr = ["This", "is", "day", "of", "the", "task", " "];
$DayInString = str_replace($arr, "", $string);
echo $DayInString;
如果$DayInString
只是一个数字,则匹配,数字是一周或一个月的日期或其他。
答案 4 :(得分:0)
我喜欢正则表达式,但是只有在没有其他直接技术来执行所需任务时才应使用它们。您可以使用filter_var($string, FILTER_SANITIZE_NUMBER_INT)
检查并提取期望的整数值,条件是也将整数存储到$int
的一行中。
代码:(Demo)
$string = 'This is day 7 of the task';
if ($int = filter_var($string, FILTER_SANITIZE_NUMBER_INT)) {
echo "Found \"$int\" inside of $string";
} else {
echo "No integers found inside of $string";
}
echo "\n---\n";
$string = 'This is a day of the week';
if ($int = filter_var($string, FILTER_SANITIZE_NUMBER_INT)) {
echo "Found \"$int\" inside of \"$string\"";
} else {
echo "No integers found inside of \"$string\"";
}
输出:
Found "7" inside of This is day 7 of the task
---
No integers found inside of "This is a day of the week"