使用 php 从字符串中提取值
extract value from string using php
我正在尝试使用 preg_match_all()
从以下行中提取开始日期 April 1, 2017
,其中两个日期都是动态的。
for April 1, 2017 to April 30, 2017
$contents = "for April 1, 2017 to April 30, 2017";
if(preg_match_all('/for\s(.*)+\s(.*)+,\s(.*?)+ to\s[A-Za-z]+\s[1-9]+,\s[0-9]\s/', $contents, $matches)){
print_r($matches);
}
如果您想匹配整个字符串并匹配 2 个类似模式的日期,您可以使用 2 个捕获组。
请注意,它不会验证日期本身。
\bfor\h+(\w+\h+\d{1,2},\h+\d{4})\h+to\h+((?1))\b
部分
\bfor\h+
单词边界,匹配 for
和 1+ 个水平空白字符
(
捕获 组 1
\w+\h+\d{1,2}
匹配 1+ 个单词字符、1+ 个水平空白字符和 1 或 2 个数字
,\h+\d{4}
匹配逗号、1+ 个水平空白字符和 4 个数字
)
关闭群组
\h+to\h+
在 1+ 个水平空白字符之间匹配 to
(
捕获 第 2 组
(?1)
Subroutine call 抓取第1组(与第1组相同的pattern因为是同一个逻辑)
)
关闭群组
\b
字边界
例如
$re = '/\bfor\h+(\w+\h+\d{1,2},\h+\d{4})\h+to\h+((?1))\b/';
$str = 'for April 1, 2017 to April 30, 2017';
preg_match_all($re, $str, $matches);
print_r($matches)
输出
Array
(
[0] => Array
(
[0] => for April 1, 2017 to April 30, 2017
)
[1] => Array
(
[0] => April 1, 2017
)
[2] => Array
(
[0] => April 30, 2017
)
)
我正在尝试使用 preg_match_all()
从以下行中提取开始日期 April 1, 2017
,其中两个日期都是动态的。
for April 1, 2017 to April 30, 2017
$contents = "for April 1, 2017 to April 30, 2017";
if(preg_match_all('/for\s(.*)+\s(.*)+,\s(.*?)+ to\s[A-Za-z]+\s[1-9]+,\s[0-9]\s/', $contents, $matches)){
print_r($matches);
}
如果您想匹配整个字符串并匹配 2 个类似模式的日期,您可以使用 2 个捕获组。
请注意,它不会验证日期本身。
\bfor\h+(\w+\h+\d{1,2},\h+\d{4})\h+to\h+((?1))\b
部分
\bfor\h+
单词边界,匹配for
和 1+ 个水平空白字符(
捕获 组 1\w+\h+\d{1,2}
匹配 1+ 个单词字符、1+ 个水平空白字符和 1 或 2 个数字,\h+\d{4}
匹配逗号、1+ 个水平空白字符和 4 个数字
)
关闭群组\h+to\h+
在 1+ 个水平空白字符之间匹配to
(
捕获 第 2 组(?1)
Subroutine call 抓取第1组(与第1组相同的pattern因为是同一个逻辑)
)
关闭群组\b
字边界
例如
$re = '/\bfor\h+(\w+\h+\d{1,2},\h+\d{4})\h+to\h+((?1))\b/';
$str = 'for April 1, 2017 to April 30, 2017';
preg_match_all($re, $str, $matches);
print_r($matches)
输出
Array
(
[0] => Array
(
[0] => for April 1, 2017 to April 30, 2017
)
[1] => Array
(
[0] => April 1, 2017
)
[2] => Array
(
[0] => April 30, 2017
)
)