试图找出一个reg ex,例如,这个字符串:
*/30 * * * * http://www.domain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
我需要捕获*/30 * * * *
的开始/wp-cron.php?doing_wp_cron >/dev/null 2>&1
和结束值*/30 * * * *
,但这些值之间的关系并不重要。
此外,0 * * * *
的开头部分有时也可以是这些值:
0 0 * * *
要么
^\*\/30 [\*].+\s[*4]
在这种情况下,我也需要一个正则表达式,或者,如果一个人可以做到这一切,那将是伟大的!如果重要的话,开头部分实际上是在字符串变量中。可以是以上任何值。
我该怎么做?
到目前为止,我有类似这样的事情:site_url()
但是我的正则表达式技巧很渺茫,而且只匹配开头...需要匹配结束,如果有办法将site_url()
放入正则表达式,我们可以匹配整条线,这将是首选。
修改
好的,所以有一个这样的变量:http://www.domain.com
,这将返回字符串中的WordPress博客网站网址,如下所示:$updateinterval
。
现在,还有一个名为*/30 * * * *
的变量,它将包含任何字符串值:0 * * * *
,0 0 * * *
或$cron_job = $updateinterval . ' ' . site_url() . '/wp-cron.php?doing_wp_cron >/dev/null 2>&1';
现在,我从这些变量构建一个字符串,如下所示:
$cron_job
它比使用它在PHP中插入一个Cron作业(据说)。但是,为了删除cron作业(因此如果不再需要它就进行清理),我需要使用正则表达式来查找cron作业的行,并编辑删除它所需的文件。
现在,我可以随时获得$ cron_job中设置的全部字符串,甚至是之前设置的内容。因此,在这种情况下,如果可以将整个字符串$updateinterval
与正则表达式匹配,那就是最好的。但是,如何在正则表达式中使用这些变量site_url()
和preg_grep
?
所以,我有一个使用*/30 * * * * http://www.domain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
0 * * * * http://www.domain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
0 0 * * * http://www.domain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
的类来删除正在设置cron作业的行。但是如何使用它来匹配变量中的所有可能值?或者只是抓住开始和结束常量?无论哪种方式都适合我。
*重新编辑* 因此,例如,它需要在文件中搜索,如果找到任何文件(REGEX),那么它就是匹配项,并且将被cron作业删除:
//我们只是说为了这个原因,site_url()解析为:http://www.domain.com。这在每个站点的基础上会有所不同。
site_url()
除了上面3个字符串之外的任何其他内容都应该失败!所以正则表达式应该只匹配上面给出的3个字符串,就是这样。也就是说,无论{{1}}是什么,如果可能的话,它应该将它添加到正则表达式。
答案 0 :(得分:2)
继续你的第三次重新编辑,如果你想要那么具体,它真的很容易:
^((\d|\*(/\d{1,2})?)\s){5}http://www.\S+/.+doing_wp_cron\s>/dev/null\s2>&1$
但这实际上取决于您希望获得的具体方式,我会将\S+
组替换为大部分内容,但这取决于您,(例如/dev/null
以及2>&1
部分)但我根据您的要求尽可能限制了它。以下是匹配的
*/30 * * * * http://www.domain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
0 * * * * http://www.domain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
0 0 * * * http://www.domain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
答案 1 :(得分:1)
那么,这是我的方法:
$pattern = '~^(?:\*/30\s\*|0\s[*0])(?:\s\*){3}\s'.preg_quote(site_url(),"~").'~';
第一部分应仅匹配案例:*/30 * * * *
,0 * * * *
,0 0 * * *
使用(?:
非捕获组进行更改,(?:\s\*){3}
匹配* * *
。
随后是site_url()
输出。所以,只需匹配它:
$arr_input = array(
"*/30 * * * * http://www.testing.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1",
"0 * * * * http://www.domain.com/bar.php?doing_wp_cron >/dev/null 2>&1",
"0 * * * * http://www.a.test/b.php?doing_wp_cron >/dev/null 2>&1",
"*/30 * * * * http://www.domain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1",
"0 * * * * http://www.domain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1",
"0 0 * * * http://www.domain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1");
foreach($arr_input AS $v)
{
if(preg_match($pattern, $v)) {
echo "MATCH: ".$v."\n";
} else {
echo "FAIL: ".$v."\n";
}
}