我有一些例子如下。我需要的是删除特定行中的定时部分。例如来自:
Uefa Europa League Simulcast 8.00am-10.00Am
我只需要:
欧洲联盟欧洲联盟联播
我是regex的新手。有人可以指导我。
以下是我正在使用的一些示例字符串:
答案 0 :(得分:5)
<?php
$str = array("Uefa Europa League Simulcast 8.00am-10.00Am",
"MLB: Chicago White Sox at Los Angeles Angels 8.00PM-11.00AM",
"MLB Spring: Chicago Cubs at Los Angeles Dodgers 8.00aM-11.00PM",
"Live Test Cricket New Zealand v England: Second Test Day Two 9:00am-5:00am",
"UEFA Europa League Hightlights 10.00pm-11.00pm");
foreach ($str as $s) {
$new = preg_replace('/\s*\d?\d[\.\:]\d\d[ap]m-\d?\d[\.\:]\d\d[ap]m\s*$/i', '', $s);
echo "$new\n";
}
输出
Uefa Europa League Simulcast
MLB: Chicago White Sox at Los Angeles Angels
MLB Spring: Chicago Cubs at Los Angeles Dodgers
Live Test Cricket New Zealand v England: Second Test Day Two
UEFA Europa League Hightlights
/\s*\d?\d[\.\:]\d\d[ap]m-\d?\d[\.\:]\d\d[ap]m\s*$/i
\s*
表示零个或多个空格\d?
表示一位或零位\d
表示数字[\.\:]
表示.
或:
[ap]
表示a
或p
$
表示字符串结尾/.../i
表示不区分大小写答案 1 :(得分:1)
不需要正则表达式 - 您可以在最后一个空格处修剪字符串:
<?php
$str = array(
"Uefa Europa League Simulcast 8.00am-10.00Am",
"MLB: Chicago White Sox at Los Angeles Angels 8.00PM-11.00AM",
"MLB Spring: Chicago Cubs at Los Angeles Dodgers 8.00aM-11.00PM",
"Live Test Cricket New Zealand v England: Second Test Day Two 9:00am-5:00am",
"UEFA Europa League Hightlights 10.00pm-11.00pm"
);
foreach ($str as $s) {
$trimmed = substr($s, 0, strrpos($s, ' '));
echo "$trimmed\n";
}
?>
答案 2 :(得分:1)
正则表达式只匹配常规字符串,所以让我们分解你提供的示例字符串并寻找一些规律性:
8.00am-10.00Am
8.00PM-11.00AM
8.00PM-11.00AM
8.00PM-11.00AM
10.00pm-11.00pm
所以我可以看到:
\d{1,2}
.
或冒号:
。这可以表示为[.:]
\d{2}
AM
或PM
,不区分大小写。要使用不区分大小写,我们可以对整个模式使用i
修饰符,因此我们只需要匹配am
或pm
,即(am|pm)
。这将表现为捕获组,我们不需要捕获,因此我们可以使用(?:am|pm)
(非捕获组)优化表达式-
,这可以用字面表示所以,当我们把它们放在一起时,我们得到:
/\d{1,2}[.:]\d{2}(?:am|pm)-\d{1,2}[.:]\d{2}(?:am|pm)/i
但等等......这会在主题字符串的末尾留下尾随空格。好吧,我们可以trim()
关闭此功能,但我们也可以通过将\s*
添加到模式中来获取正则表达式以便为我们处理。
/\s*\d{1,2}[.:]\d{2}(?:am|pm)-\d{1,2}[.:]\d{2}(?:am|pm)/i
所以现在我们只需要用空字符串替换匹配此模式的任何内容。您可以使用preg_replace()
:
$pattern = '/\s*\d{1,2}[.:]\d{2}(?:am|pm)-\d{1,2}[.:]\d{2}(?:am|pm)/i';
$string = 'Uefa Europa League Simulcast 8.00am-10.00Am';
$string = preg_replace($pattern, '', $string);
var_dump($string);