Regex 将yyyymmdd转换为yyyy mm dd的正则表达式
我想转换这个数据格式Regex 将yyyymmdd转换为yyyy mm dd的正则表达式,regex,Regex,我想转换这个数据格式 20140102 到 使用正则表达式 我尝试过的模式如下: ([0-9]{4})([0-9][0-9])([0-9][0-9]) 我遇到的问题是删除0 请帮忙,谢谢 使用 (\d{4})(0)?((?(2)\d|\d\d))(0)?((?(4)\d|\d\d)) 替换为\1-\3-\5 说明: (\d{4}) // capture 4 digits in group 1 (year) (0)? // next, consume a 0 if possible ( /
20140102
到
使用正则表达式
我尝试过的模式如下:
([0-9]{4})([0-9][0-9])([0-9][0-9])
我遇到的问题是删除0
请帮忙,谢谢 使用
(\d{4})(0)?((?(2)\d|\d\d))(0)?((?(4)\d|\d\d))
替换为\1-\3-\5
说明:
(\d{4}) // capture 4 digits in group 1 (year)
(0)? // next, consume a 0 if possible
( // now, if there was a 0, consume only one more digit
(?(2)\d
| // otherwise consume two digits
\d\d)
) // captured in group 3
(0)? // and the same thing again for the last two digits
(
(?(4)\d
|
\d\d)
)
还是这个模式
(?=(?:\d{4}|\d{2})$)0?
并替换为w/-
这可以通过使用锚或单词边界来实现
^(\d{4})(0)?([1-9])(\d*?)(0)?([1-9]\d?)$
或
如果输入仅包含您指定的确切日期格式,请尝试下面的正则表达式。Lookahead断言输入正好包含8个字符
^(?=.{8}$)(\d{4})(0)?([1-9])(\d*?)(0)?([1-9]\d?)$
替换字符串:
$1-$3$4-$6
为了说明这不一定要用正则表达式来解决,这里有一个替代实现(在PHP中):
$values=['20140101','20141212'];
foreach($value作为$value)
变量转储(vsprintf(“%d%02d-%d-%d',str_分割($value,2));
结果:
string(8)“2014-1-1”
串(10)“2014-12-12”
如果我必须使用正则表达式,我可能会分两步来完成(例如,使用JavaScript):
通过这种方式,可以对每个步骤进行简单的推理和验证。哪种编程语言?正则表达式在不同语言中的实现方式不同。此外,这个问题在没有正则表达式的情况下是可以解决的——根据语言的不同,正则表达式可能是一种更好的方法。如果输入是
20141112
@Chan,那么输出是什么?这是一个精确的输入字符串吗?这是一个好主意,但只有当日期在一行末尾时才有效,由于$
anchor.replace$
w/\b
then:-)+1很好,我们不能确定,因为问题还不清楚。注意:(?(n)
不是“通用”正则表达式构造。
^(?=.{8}$)(\d{4})(0)?([1-9])(\d*?)(0)?([1-9]\d?)$
$1-$3$4-$6
"20140102".replace(/(\d{4})(\d{2})(\d{2})/, "$1-$2-$3")
.replace(/-0/g, "-")