PHP preg_replace匹配字符串,但仅替换其中的一部分


php preg_replace match string but replace only part of it

>我有这段文字: Retailer-ul Amazon foloseste metode severe pentru a-si descuraja etc. angajatii din depozite sa nu mai fure din produse. Pe ecrane li se arata siluete de angajati care au furat produse, li se spune ce au furat si cat valorau produsele, aparand si mentiunea "arestat" sau "concediat", scrie Bloomberg. Unii spun ca... and so on和我正在尝试替换 fraze 中所有缩写字符串,因此例如etc.是一个缩写,因为它后面的单词angajatii以小写字母开头,而不是 produse. 这是 fraze 的结尾,因为它跟随单词Pe以大写字母开头,我不想删除它。

我有这个代码$subject = preg_replace('~'b[a-z]+'.'s[a-z]~', '', $subject);它匹配每个缩写,后面有一个.和一个空格('s),然后是一个小写字母[a-z](例如。 descuraja etc. angajatii变成了descuraja ngajatii而不是descuraja angajatii)。我不想替换其以下单词的小写字母。我不知何故无法避免它被替换。我怎样才能仍然保持相同的匹配模式,但只替换缩写、点和它后面的空格?谢谢。

你需要

[a-z]包装成一个积极的展望

'b[a-z]+'.'s(?=[a-z])

查看正则表达式演示

前瞻构造仅检查其中定义的某个模式是否出现在当前位置的右侧。因此,(?=[a-z])检查与's匹配的空格后面是否有小写 ASCII 字母。如果存在小写,则返回匹配(并发生替换),如果找不到小写字母,则匹配失败,不发生替换。