dou4121 2016-03-10 09:34
浏览 244
已采纳

php preg_replace匹配字符串,但只替换它的一部分

I have this text: 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 and I am trying to replace all strings that are abbreviations inside a fraze, so for example etc. is an abbreviation because it's following word angajatii starts with a lowercase letter, as opposed to produse. which is the end of the fraze because it's following word Pe starts with a uppercase letter and I don't want to remove it.

I have this code $subject = preg_replace('~\b[a-z]+\.\s[a-z]~', '', $subject); which matches every abbreviation with a . after it and a space (\s) and then a lowercase letter [a-z] (eg. descuraja etc. angajatii turns into descuraja ngajatii instead of descuraja angajatii). I don't want to replace the lowercase letter of its following word. I somehow can't avoid it being replaced. How can I still keep the same matching pattern but replace only the abbreviation and the dot and the whitespace after it? Thank you.

  • 写回答

2条回答 默认 最新

  • dongqiyang3711 2016-03-10 09:39
    关注

    You need to wrap the [a-z] into a positive lookahead:

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

    See the regex demo

    The lookahead construct just checks if some pattern defined inside it appears to the right of the current location. So, (?=[a-z]) checks if there is a lowercase ASCII letter right after the whitespace matched with \s. If there is a lowercase, a match is returned (and the replacement occurs), if it does not find the small letter, the match is failed, no replacement occurs.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog