自定义php的正则表达式

时间:2012-11-01 12:13:05

标签: php regex

我有一个类似

的字符串
<?php
$string = Monday & SUNDAY 11:30 PM et/pt;
//or
$string = Monday 11:30 PM et/pt;
?>

我想在两个案例中获取'11:30 PM',我想我无法使用爆炸,所以这将是正则表达式,也请告诉我一些非常好的学习正则表达式。 提前致谢

4 个答案:

答案 0 :(得分:1)

对于原始方法的若干修复,会向下面的评论者提供信用,但仍有一些未解决的问题。

如果您想要固定的2小时格式:(0[0-9]|1[0-2]):[0-5]\d [AP]M

答案 1 :(得分:1)

有效匹配twelve-our-clock我会使用如下所示的正则表达式。十二小时的时间从01:00到12:59:

$regex = "#\b(?:0[0-9]|1[0-2]):[0-5][0-9] [AP]M\b#i";

答案 2 :(得分:0)

Malik,要检索您可能使用预制库正则表达式的时间/日期,请搜索此查询:http://regexlib.com/Search.aspx?k=digit&c=5&m=-1&ps=20

基本上你的时间字段相似,(具有相同的分隔符':'),我建议在输入字符串中匹配简单的正则表达式:\d{1,2}:\d{2} [PA]M。如果你想让它不区分大小写,请使用 i pattern modifier。 有关正则表达式的基础知识,欢迎阅读here

我给你这个PHP的匹配函数( i 后第二个斜杠(/)使模式不区分大小写:am, AM, Am, aM将是相同的):

  preg_match('/\d{1,2}:\d{2} [PA]M/i', $string, $time);
  print ($time); 

如果在数字之后可能没有空格(例如上午11:30)或者超过一个空格字符,则正则表达式应如下所示:  /\d{1,2}:\d{2}\s*[PA]M/i

答案 3 :(得分:-1)

此代码将为您提供 11:30 PM

preg_match('$([0-9:]{3,5}) ([AP])M$','Monday & SUNDAY 11:30 PM et/pt',$m);
echo $m['1']." ".$m['2']."M";