捕获字符串中的第一个单词和数字

时间:2019-08-01 18:09:40

标签: php regex

我有一个示例字符串,例如

September 14-20, 26, 28-30, October 1-8, 10, 11, 15-20, 24, November 25, 28-30

使用(?:^|(?:[.!?]\s))(^[^\d]*(\d+))(\w+)时,它不会单独捕获第一个单词和数字。

enter image description here

如何在单个表达式中仅捕获 September14

3 个答案:

答案 0 :(得分:1)

我能理解的一个简单版本(我不是正则表达式人)是...

^(\w+)\s(\d+)

基本上-从开头(^)开始,然后出现1+个单词字符((\w+)),然后是一个数字序列((\d+))。

在PHP中:

$str = 'September 14-20, 26, 28-30, October 1-8, 10, 11, 15-20, 24, November 25, 28-30';
preg_match('/(\w+)\s(\d+)/', $str, $pieces);
$first_month = $pieces[1];
$first_day = $pieces[2];
var_dump($first_month, $first_day);

https://3v4l.org/USVNa

答案 1 :(得分:0)

尝试一下-

(?:^|(?:[.!?]\s))^([^\d]*)(\d+)

答案 2 :(得分:-1)

如果您只想匹配示例字符串中任意位置的一个匹配项,则删除/g标志:

/\w+\s\d+/

26, 28-30, October 1-8, 10, 11, 15-20, 24, November 25, 28-30的结果

enter image description here

https://regex101.com/r/Nofzab/2

使用September 14-20, 26, 28-30, October 1-8, 10, 11, 15-20, 24, November 25, 28-30将使您September 14