我有一个这样的字符串:l' opp lop
我需要删除l'
和o
之间的空白区域,因此必须返回l'opp lop
。
但是我还需要处理不同情况的字符串,例如:L' opp LOP
,L' Opp lop
,l' Opp lop
并返回正确的字符串而不会在这些字符串之间留出额外的空格,所以结果有是:L'opp LOP
,L'Opp lop
,l'Opp lop
。
我已尝试$new = str_ireplace( "l' o", "l'o", $string );
但它总是返回包含l'o
的字符串,因此如果字符串为L'Opp lop
,则结果始终为小写:l'opp lop
。
是否可以使用正则表达式获得解决方案,因为我还需要使用它来匹配l' a
,l' i
,l' u
,l' e
?
由于
答案 0 :(得分:2)
您可以使用
~\b(l)'\s+([a-z])~i
并替换为$1$2
。
请参阅regex demo
重点是使用捕获组以及替换后需要返回的子模式。
正则表达式解释:
\b
- 开始字边界(l)
- 匹配并捕获到第1组中的字母l
或L
(使用/i
不区分大小写的修饰符)'
- 文字撇号\s+
- 一个或多个空格(您可以使用\h+
仅限于水平空格)([a-z])
- 匹配并捕获第2组任何ASCII字母(大写和小写)。在替换模式中,第1组和第2组分别是$1
和$2
的反向引用。