将两个简单的正则表达式合二为一

时间:2014-07-04 16:06:56

标签: php regex

我正在尝试制作一个正面的正则表达式,它将在.txt后面,然后在" - "后面。并获得第一个数字....在示例中,它将是1.

$record_pattern = '/.txt.+/';
preg_match($record_pattern, $decklist, $record);
print_r($record);

.txt?n=chihoi%20%283-1%29

我想把它写成一个表达式,但似乎只能将其作为两个表达式。这是第一次使用正则表达式。

2 个答案:

答案 0 :(得分:2)

您可以使用:

$record_pattern = '/\.txt.+-(\d)/';

现在,第一组包含您想要的内容。

答案 1 :(得分:1)

你的正则表达式是,

\.txt[^-]*-\K\d

您不需要任何群组。它只匹配.txt和文字-。由于我们的正则表达式中的\K,它会丢弃先前匹配的字符。在我们的例子中,它丢弃.txt?n=chihoi%20%283-字符串。然后它再次开始匹配刚刚到-

之后的第一个数字

DEMO

您的PHP代码将是,

<?php
$mystring = ".txt?n=chihoi%20%283-1%29";
$regex = '~\.txt[^-]*-\K\d~';
if (preg_match($regex, $mystring, $m)) {
    $yourmatch = $m[0]; 
    echo $yourmatch;
    }
?> //=> 1