首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >读取最后一个字母时出现的前视正则表达式问题

读取最后一个字母时出现的前视正则表达式问题
EN

Stack Overflow用户
提问于 2011-07-07 18:43:57
回答 2查看 115关注 0票数 0

我的代码

代码语言:javascript
运行
复制
preg_match_all('/\{([\w]+)(\s.*)?[^\}]\}(.*)\{\/\w+[^\}]\}/', $nbody, $matches );

我的模板

代码语言:javascript
运行
复制
rtrim: Beginning Text{rtrim}  String     {/rtrim}Surrounding Text
camelize: {camelize}Camelize Some Text Like A MediaWiki Title{/camelize}

Date Modifiers
date: {date format="M/d/Y"}June 14th 1965{/date}
iso date: {date format="c"}1310036802{/date}
timestamp date: {date format="c"}June 14th 1965{/date}
time: {time}{/time}

我正在尝试让我的正则表达式工作,这样我就可以捕获{date format=""}示例中看到的属性。使用上面的模式,我已经完成了99%,但它吃掉了没有属性的{tag}的最后一个字符。

代码语言:javascript
运行
复制
...
[11] => rtri
[12] => cameliz
[13] => date
[14] => date
...

以及属性匹配的最后一个“

代码语言:javascript
运行
复制
...
[13] =>  format="M/d/Y
[14] =>  format="c
[15] =>  format="c
...

任何帮助都将不胜感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-07 18:52:17

这个expr可能更适合

代码语言:javascript
运行
复制
~{(\w+)(.*?)}(.*?){/\\1}~si
票数 1
EN

Stack Overflow用户

发布于 2011-07-07 18:50:20

为了防止它“吃掉”这些字符,删除随机的[^\}]。但我猜你的意思是在他们的帮助下写一个更好的正则表达式,可能是这样的:

代码语言:javascript
运行
复制
/\{(\w+)  (?: \s+(\S[^}]*))?  }  (.*?)  \{\/ \1 }/x

(在使用前正确引用和转义它。)

这应该会工作得更好。在嵌套的标签上仍然会失败(但如果你有,那么你正在用正则表达式解析超文本标记语言),如果标签的内容可以有} (如果需要可以修复),也不会工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6609356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档