Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 将yyyymmdd转换为yyyy mm dd的正则表达式_Regex - Fatal编程技术网

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, "-")