php - 正则表达式 - 匹配到点,但没有最后一个字符

标签 php regex

我有包含多个条目的大文件,例如

car.bus.bike:
car.bus.bike.vehicle
car.bus.bike
_car.bus.bike
'car.bus.bike'

我想匹配并替换car.bus.bike没有匹配最后一个 :或者与 .vehicle 不匹配或者在匹配的地方加上任何前缀。

所以最后我想替换car.bus.bikecat.mouse.dog就像:

cat.mouse.dog:
car.bus.bike.vehicle
cat.mouse.dog
_car.bus.bike
'cat.mouse.dog'

我尝试过匹配直到 . ,与 [^-_.]$但它也匹配 :我尝试使用积极的前瞻 (?=\:)或负面回顾 (?<!_)但每次只涵盖一种情况。

最佳答案

您可以使用此正则表达式进行搜索:

(?<!\.)\b\pL\w*(?:\.\w+){2}(?=[':]|$)

并将其替换为:

cat.mouse.dog

RegEx Demo

正则表达式详细信息:

  • (?<!\.) : 断言之前的位置没有点
  • \b :匹配单词边界
  • \pL :匹配unicode字母
  • \w* :匹配0个或多个单词字符
  • (?:\.\w+){2} :匹配一个点后跟 1 个以上单词字符。重复此组 2 次
  • (?=[':]|$) :断言我们有一个 ;'或下一个位置的行尾

对于 PHP,请使用此正则表达式:

/(?<!\.)\b\pL\w*(?:\.\w+){2}(?=[':]|$)/mu

关于php - 正则表达式 - 匹配到点,但没有最后一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70568956/

相关文章:

regex - 从行中提取模式,例如grep ("Oh|oh",单词,值 = TRUE)

regex - "decimal literal empty"在 Rust 中为正则表达式组合多个字符串时

MySql 正则表达式测试

Java正则表达式来标准化MAC地址

regex - 正则表达式 - 以字符串开头和结尾

php - 拉维尔 4 : Class does not exist

php - 坚持使用 PHP 还是学习 Go-lang?

php - Joomla 模板 - 将页脚放在底部

php - 简单的 Laravel View::make() 不工作

php - 根据我的数据库中是否有数据更改我的网站中的链接