正则表达式:空格和在非捕获组中
Regex: whitepsace and in non-capturing group
我在 PHP 中使用正则表达式来匹配时间字符串。我想在非捕获组中包括白色 space 和
以获得以下匹配:
比赛:晚上 10 点
比赛:10
下午
这是我正在使用的正则表达式,但它不匹配
的项目
(\b)(\d{1,2}:\d\d|\d{1,2})(?:\s| )(a\.?m\.?|p\.?m\.?)(\s|<|$|,)
如果你想匹配这两个值,你可以编写并将模式缩短为:
\b\d{1,2}(?::\d\d)?(?:\s?| )[ap]\.?m\b
\b
一个单词边界
\d{1,2}
匹配1-2位数字
(?::\d\d)?
可选匹配 :
和 1-2 位
(?:\s?| )
匹配可选的空白字符或  
[ap]\.?m
匹配 a
或 p
可选点和 m
\b
一个单词边界或者使用(?:\s|<|$|,)
/\b\d{1,2}(?:\s*(?: )?\s*)?(?:[ap]m\b|[ap]\.m\.)/
/\b\d{1,2}(?:\s*(?: )?\s*)?(?:[ap]m\b|[ap]\.m\.)/
\b
断言单词边界处的位置:(^\w|\w$|\W\w|\w\W)
\d
匹配一个数字(相当于 [0-9]
)
{1,2}
匹配前一个令牌 1 和 2 次,尽可能多的次数,根据需要回馈(贪心)
Non-capturing组(?:\s*(?: )?\s*)?
?
在零到一次之间匹配前一个标记,尽可能多的次数,根据需要回馈(贪婪)
\s
匹配任何空白字符(相当于 [\r\n\t\f\v ]
)
*
在零次和无限次之间匹配前一个标记,尽可能多的次数,根据需要回馈(贪婪)
Non-capturing组(?: )?
?
在零到一次之间匹配前一个标记,尽可能多的次数,根据需要回馈(贪婪)
匹配字符 字面意思
\s
匹配任何空白字符(相当于 [\r\n\t\f\v ]
)
*
在零次和无限次之间匹配前一个标记,尽可能多的次数,根据需要回馈(贪婪)
Non-capturing组(?:[ap]m\b|[ap]\.m\.)
第一个备选方案[ap]m\b
匹配下面列表中的单个字符[ap]
ap
匹配列表中的单个字符 ap
m
匹配字符 m 字面意思
\b
断言单词边界处的位置:(^\w|\w$|\W\w|\w\W)
第二个选择[ap]\.m\.
匹配下面列表中的单个字符[ap]
ap
匹配列表中的单个字符 ap
\.
匹配字符 .
字面意思
m
匹配字符 m 字面意思
\.
匹配字符 .
字面意思
全局模式标志
g
修饰符:g 局部。所有比赛(第一场比赛后不要return)
console.log(`
Match10pm<br>
Match:100pm<br>
Match:10pm<br> - match
Match:10 pm<br> - match
Match:10 pmm<br>
Match: 10p.m<br>
Match: 10p.m.<br> - match
Match: 10 pm <br> - match
Match: 10 pm - match
Match: 10 pmm
Match: 10 pm<br> - match
Match: 10 pm<br> - match
Match: 10 pm<br> - match`
// see ... [https://regex101.com/r/9186yf/2]
.match(/\b\d{1,2}(?:\s*(?: )?\s*)?(?:[ap]m\b|[ap]\.m\.)/g)
);
.as-console-wrapper { min-height: 100%!important; top: 0; }
我在 PHP 中使用正则表达式来匹配时间字符串。我想在非捕获组中包括白色 space 和
以获得以下匹配:
比赛:晚上 10 点
比赛:10
下午
这是我正在使用的正则表达式,但它不匹配
(\b)(\d{1,2}:\d\d|\d{1,2})(?:\s| )(a\.?m\.?|p\.?m\.?)(\s|<|$|,)
如果你想匹配这两个值,你可以编写并将模式缩短为:
\b\d{1,2}(?::\d\d)?(?:\s?| )[ap]\.?m\b
\b
一个单词边界\d{1,2}
匹配1-2位数字(?::\d\d)?
可选匹配:
和 1-2 位(?:\s?| )
匹配可选的空白字符或 
[ap]\.?m
匹配a
或p
可选点和m
\b
一个单词边界或者使用(?:\s|<|$|,)
/\b\d{1,2}(?:\s*(?: )?\s*)?(?:[ap]m\b|[ap]\.m\.)/
/\b\d{1,2}(?:\s*(?: )?\s*)?(?:[ap]m\b|[ap]\.m\.)/
\b
断言单词边界处的位置:(^\w|\w$|\W\w|\w\W)
\d
匹配一个数字(相当于[0-9]
){1,2}
匹配前一个令牌 1 和 2 次,尽可能多的次数,根据需要回馈(贪心)
Non-capturing组
(?:\s*(?: )?\s*)?
?
在零到一次之间匹配前一个标记,尽可能多的次数,根据需要回馈(贪婪)\s
匹配任何空白字符(相当于[\r\n\t\f\v ]
)*
在零次和无限次之间匹配前一个标记,尽可能多的次数,根据需要回馈(贪婪)Non-capturing组
(?: )?
?
在零到一次之间匹配前一个标记,尽可能多的次数,根据需要回馈(贪婪)
匹配字符 字面意思
\s
匹配任何空白字符(相当于[\r\n\t\f\v ]
)*
在零次和无限次之间匹配前一个标记,尽可能多的次数,根据需要回馈(贪婪)
Non-capturing组
(?:[ap]m\b|[ap]\.m\.)
第一个备选方案
[ap]m\b
匹配下面列表中的单个字符
[ap]
ap
匹配列表中的单个字符 ap
m
匹配字符 m 字面意思\b
断言单词边界处的位置:(^\w|\w$|\W\w|\w\W)
第二个选择
[ap]\.m\.
匹配下面列表中的单个字符
[ap]
ap
匹配列表中的单个字符 ap
\.
匹配字符.
字面意思m
匹配字符 m 字面意思\.
匹配字符.
字面意思
全局模式标志
g
修饰符:g 局部。所有比赛(第一场比赛后不要return)
console.log(`
Match10pm<br>
Match:100pm<br>
Match:10pm<br> - match
Match:10 pm<br> - match
Match:10 pmm<br>
Match: 10p.m<br>
Match: 10p.m.<br> - match
Match: 10 pm <br> - match
Match: 10 pm - match
Match: 10 pmm
Match: 10 pm<br> - match
Match: 10 pm<br> - match
Match: 10 pm<br> - match`
// see ... [https://regex101.com/r/9186yf/2]
.match(/\b\d{1,2}(?:\s*(?: )?\s*)?(?:[ap]m\b|[ap]\.m\.)/g)
);
.as-console-wrapper { min-height: 100%!important; top: 0; }