我有一个示例字符串,例如
September 14-20, 26, 28-30, October 1-8, 10, 11, 15-20, 24, November 25, 28-30
使用(?:^|(?:[.!?]\s))(^[^\d]*(\d+))(\w+)
时,它不会单独捕获第一个单词和数字。
如何在单个表达式中仅捕获 September
和14
?
答案 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);
答案 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
的结果
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