php - 正则表达式不能限制搜索范围
问题描述
我有以下问题:
我有这样的模式:
/(?<=template=")(.*?)(.*\/)/gm
还有这样的文字:
template="test/widgets/glasgow.phtml"}}
我的正则表达式应该搜索我的文件前面的路径,我需要将它剪掉,以便它看起来像这样:
template="glasgow.phtml"}}
这很好用,但问题是我有时会有一个看起来像这样的文本:
block="core/template" template="test/widgets/getcallus.phtml"}}</p>
它削减了一切,直到</
.
这被删掉了:
test/widgets/getcallus.phtml"}}</
代替:
test/widgets/
我试图用它来限制结尾,$
但它什么也没做。
我正在 regexr.com 上对其进行测试
解决方案
您可以使用以下模式:
template="\K[^"\/]*\/[^"\/]*\/
请参阅正则表达式演示。在 PHP 中,如果您指定另一个正则表达式分隔符,您可能会去掉反斜杠:
$regex = '~template="\K[^"/]*/[^"/]*/~';
细节
template="
- 文字文本\K
- 匹配重置运算符[^"\/]*
- 0 个或多个字符,而不是/
and"
\/
- 一个/
字符[^"\/]*
- 0 个或多个字符,而不是/
and"
\/
- 一个/
字符
它等于template="\K(?:[^"\/]*\/){2}
,其中(?:...){2}
重复模式的非捕获组序列两次。
推荐阅读
- python - 如何在子对象中获取父对象
- deep-learning - RuntimeError: 4 维权重 [1024, 64, 3, 3] 的预期 4 维输入,但输入的大小为 [32, 10]
- java - 尝试在 ODI 中删除 java 代码中的行尾字符
- html - 获取选定的选项卡以切换图标 Ionic 5
- flutter - 如何在 Dart 中创建证书(X509Certificate)?
- r - 下载在 Shiny 中创建的表格
- python - 使用 python3 而不是默认的 python 2.7 运行脚本
- facebook - Facebook 应用的“添加产品”页面中没有可添加的产品
- mysql - 从一个表中选择行,当存在时使用另一个表中的值
- javascript - Jquery查找元素是否包含超过特定文本