我有包含多个条目的大文件,例如
car.bus.bike:
car.bus.bike.vehicle
car.bus.bike
_car.bus.bike
'car.bus.bike'
我想匹配并替换car.bus.bike
没有匹配最后一个 :
或者与 .vehicle
不匹配或者在匹配的地方加上任何前缀。
所以最后我想替换car.bus.bike
与 cat.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
正则表达式详细信息:
-
(?<!\.)
: 断言之前的位置没有点 -
\b
:匹配单词边界 -
\pL
:匹配unicode字母 -
\w*
:匹配0个或多个单词字符 -
(?:\.\w+){2}
:匹配一个点后跟 1 个以上单词字符。重复此组 2 次li> -
(?=[':]|$)
:断言我们有一个;
或'
或下一个位置的行尾
对于 PHP,请使用此正则表达式:
/(?<!\.)\b\pL\w*(?:\.\w+){2}(?=[':]|$)/mu
关于php - 正则表达式 - 匹配到点,但没有最后一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70568956/