正则表达式只匹配正则字符串,所以让我们分解您提供的示例字符串并寻找一些规律性:
8.00am-10.00Am
8.00PM-11.00AM
8.00PM-11.00AM
8.00PM-11.00AM
10.00pm-11.00pm
所以我可以看到:
- 它总是以一位或两位数字开头。这可以表示为
\d{1,2}
- 这后跟一个点
.
或冒号:
。这可以表示为[.:]
- 这总是后跟 2 位数字:
\d{2}
- 然后是字符串
AM
或PM
不区分大小写。要使用不区分大小写,我们可以i
对整个模式使用修饰符,所以我们只需要匹配am
or 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
所以现在我们只需要用一个空字符串替换任何匹配这个模式的东西。您可以在 PHP 中使用以下命令执行此操作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);
看到它工作