Php Preg_匹配不同的单词组合

Php Preg_匹配不同的单词组合,php,preg-match,substr,Php,Preg Match,Substr,我有一个关于preg_比赛的小问题,这些regex的东西真的很难理解,我希望有人能给出正确的答案 我有以下案文: 0A-24-423 但这也可以是: 0A-242-2 或 如何使用preg_匹配来过滤这些内容?我在用 substr($something, 0,2) 这样它就可以捕获0A和 substr($seat, 4,5) 这将捕获24个,但当您获得242个时,它不会捕获最后2个 希望有人能在preg_match中帮助创建这个 为了更清楚地说明我现在的情况: forea

我有一个关于preg_比赛的小问题,这些regex的东西真的很难理解,我希望有人能给出正确的答案

我有以下案文:

0A-24-423
但这也可以是:

0A-242-2

如何使用preg_匹配来过滤这些内容?我在用

substr($something, 0,2)
这样它就可以捕获0A和

substr($seat, 4,5)
这将捕获24个,但当您获得242个时,它不会捕获最后2个

希望有人能在preg_match中帮助创建这个

为了更清楚地说明我现在的情况:

        foreach($_POST['seats'] AS $seat) {
        if ($count > 0) {
            $selectQuery .= " || ";
        }
        $selectQuery .= " ( rowId = '" . substr($seat, 0,2) . "'";
        $selectQuery .= " and `order` = " . substr($seat, 3,5) . "  ";
        $selectQuery .= " and columnId = " . substr($seat, 6) . " ) ";
        $count++;
$seat的格式是XXXXXX,使用substr我可以得到正确的东西(例如:0J3017)

像这样的东西应该可以做到:

    $selectQuery = "SELECT * from seats where ";
    $count = 0;
$pattern = "I DON'T KNOW :( ";
    foreach($_POST['seats'] AS $seat) {
        if ($count > 0) {
            $selectQuery .= " || ";
        }
        preg_match($pattern, $seats, $matches);
        $selectQuery .= " ( rowId = '" . $matches[0] . "'";
        $selectQuery .= " and `order` = " . $matches[1] . "  ";
        $selectQuery .= " and columnId = " . $matches[2] . " ) ";
        $count++;
$seats在文章开头解释(格式为
XX-XXX-XXX

where the first 2 XX  are 0[A-Z] (yes the 0 is correct)
where the 3 first XXX are [0-9]
Where the last 3  XXX are [0-9]
编辑: 有两种方法可以解决这个问题

备选案文1:

$pattern = "/(.*)-(.*)-(.*)/";

或者使用explode()函数。

编辑:由于OP已将其要求作为对我答案的注释,我已相应地更新了我的答案

您可以尝试以下方法:

$pattern = "/[A-Z\d]{1,2}-[A-Z\d]{1,3}-[A-Z\d]{1,3}/";
$matched = preg_match($pattern, $something);
if ($matched === 0) {
  die('regex did not match');
}

$matched
将为匹配字符串提供
1
,如果不匹配,则提供
0

编辑:由于OP已将其要求作为对我答案的注释,我已相应更新了我的答案

您可以尝试以下方法:

$pattern = "/[A-Z\d]{1,2}-[A-Z\d]{1,3}-[A-Z\d]{1,3}/";
$matched = preg_match($pattern, $something);
if ($matched === 0) {
  die('regex did not match');
}

$matched
将为匹配的字符串提供
1
,如果不匹配则提供
0

看起来不需要使用正则表达式。下面是使用and的示例:


然后,您可以在
$selectQuery

中使用这三个新变量。看起来您不需要使用正则表达式。下面是使用and的示例:


然后,您可以在
$selectQuery

中使用这三个新变量,谢谢您的加价(对不起)。我没有真正尝试过任何东西,因为我对正则表达式一无所知……我读了一些文章,但我真的不清楚……@user1939649和我一样:)但是你能更详细地解释一下你的问题是什么类型的过滤吗?就像我说的,我有一个php脚本,可以从javascript帖子中获取以下格式的信息0A-24-423,但这也可以是:0A-242-2或0A-2-423。首先,我刚得到了1种格式:a-2-2,我只是用substr来表示,但现在我有了这些不同的输入格式(动态生成!)我必须使用preg_匹配(至少这是我能找到的替换substr的方法)一分钟你能解释一下什么是0A和242和423吗?我可以帮你!@有抱负的Aqib我已经更新了第一篇博文感谢加分(抱歉).我没有真正尝试过任何东西,因为我对正则表达式一点也不了解…我读了一些文章,但我真的不清楚…@user1939649和我一样:)但是你能解释一下你的问题吗?什么类型的过滤?就像我说的,我有一个php脚本,可以从javascript帖子中获取以下格式的信息0A-24-423,但也可以是:0A-242-2或0A-2-423。首先,我只有1个格式:a-2-2,我只需要substr,但现在我有了这些不同类型的输入格式(动态生成!),我必须使用preg_匹配(至少这是我能找到的替换substr的方法)一分钟你能解释一下什么是0A和242和423吗?我可以帮你!@有抱负的Aqib我已经更新了第一篇博文谢谢你的模式,我不是说英语的人,所以解释一下有点难;)很有活力,你可以按如下方式解释输入:XX-XXX-XXX,其中XX将被数字或字符(ABCDEFG等)替换。我用希望的右边更新了第一篇文章explanation@user1939649根据评论更新了我的答案。谢谢你的模式,我不会说英语,所以解释一下这有点难;)它是动态的,你可以按如下方式解释输入:XX-XXX-XXX,其中XX将被数字或字符(ABCDEFG等)替换。我用希望的右边更新了第一篇文章explanation@user1939649根据评论更新了我的答案。老兄,你太棒了!完全忘记了explode()函数,非常感谢!老兄,你太棒了!完全忘记了explode()函数,非常感谢!
list($row_id, $order, $column_id) = explode('-', $seat, 3);