这段从中文时间字符串中提出年月日数值的正则表达式怎么写

这段从中文时间字符串中提出年月日数值的正则表达式怎么写,第1张

时间:(\d{4})年(\d{1,2})月(\d{1,2})日(\d{1,2})时,括号里的就是分组了,第0个分组表示整个匹配,你需要的是第一个到第四个分组,java中是这样获取的

Matcher m = Patterncompile("时间:(\d{4})年(\d{1,2})月(\d{1,2})日(\d{1,2})")matcher("时间:2013年11月28日15时"); //这里要注意,时间后面的冒号是用中文输入法还是英文输入法的

if(mfind()) {

//这里打印的分别是年月日时的数字

Systemoutprintln(mgroup(1)+mgroup(2)+mgroup(3)+mgroup(4));

}

var str = "2013年11月5日上午9点"

var matches = strmatch(/\d+/g);

var year = matches[0];

var month = matches[1];

var date = matches[2];

var hour = matches[3];

alert([year, month, date, hour]join('\n'));

package p1;

import javautilregexMatcher;

import javautilregexPattern;

public class RunnableTicket

{

public static void main ( String[] args )

{

String reg = "[1-9]\\d{3}(((0[13578]|1[02])([0-2]\\d|3[01]))|((0[469]|11)([0-2]\\d|30))|(02([01]\\d|2[0-8])))";

String str = "某一节目第20140502期";

Pattern pattern = Patterncompile (reg);

Matcher matcher = patternmatcher (str);

while (matcherfind ())

{

Systemoutprintln (matchergroup ());

}

}

}

正则表达式擅长的事匹配,不是判断,所以在做日期合法性判断的时候会比较复杂。

所求正则表达式如下:

2015-08-(3[0-1]|[1-2][0-9]|0[8-9])|2015-(10|12)-(3[0-1]|[1-2][0-9]|0[1-9])|2015-(9|11)-(30|[1-2][0-9]|0[1-9])|2016-02-([1-2][0-9]|0[1-9])|2016-(1,3,5,7,8)-(3[0-1]|[1-2][0-9]|0[1-9])|2016-(4,6,9)-(30|[1-2][0-9]|0[1-9])|2015-10-(10|0[1-9])

解释:

2015-08-(3[0-1]|[1-2][0-9]|0[8-9]) # 匹配8月合法日期

|

2015-(10|12)-(3[0-1]|[1-2][0-9]|0[1-9]) # 匹配15年大月合法日期

|

2015-(9|11)-(30|[1-2][0-9]|0[1-9]) # 匹配15年小月合法日期

|

2016-02-([1-2][0-9]|0[1-9]) # 匹配16年2月合法日期

|

2016-(1,3,5,7,8)-(3[0-1]|[1-2][0-9]|0[1-9]) # 匹配16年大月

|

2016-(4,6,9)-(30|[1-2][0-9]|0[1-9]) # 匹配16年小月

|

2015-10-(10|0[1-9]) # 匹配16年10月

# 中间用或者符号|连接表示或

如果不考虑大月小月,可以简化一点(统一使用大月的正则匹配),但是还是最少得有4行。

1, 一种是使用以下正则, 取得三个分组, 再将三个分组合并

(\d{4})-(\d{2})-(\d{2})

2, 一种是使用替换, 以下是js语法供参考

'aabbccc2016-07-31cccddd9988eee7766ffff'replace(/(\d{4})-(\d{2})-(\d{2})/, function(x, a, b, c){return a + b + c})

^\d{4}(年|\-|\)(0[1-9]|1[0-2])(月|\-|\)(0[1-9]|[1-2]\d|3[0-1])日$

这种是还是有缺陷的你可以看到最后一个,还有就是2月31日这样的也会被匹配的。不过应对一般日期还是可以的。

以上就是关于这段从中文时间字符串中提出年月日数值的正则表达式怎么写全部的内容,包括:这段从中文时间字符串中提出年月日数值的正则表达式怎么写、如何用js正则表达式提取出字符串(不含引号):“2013年11月5日上午9点”中的年月日时间数字、java 正则表达式 字符串中提取日期 例如:某一节目第20140502期等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9616492.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存