【问题标题】:Template string parsing in phpphp中的模板字符串解析
【发布时间】:2013-08-28 15:51:58
【问题描述】:

我在 php 中遇到字符串解析问题。我正在尝试创建自己的模板解析器(出于学习目的)。我决定将 url 设置为以下格式 {url:abc/def},这样它就会像 http://www.domain.com/abc/def 一样显示。我曾尝试使用 str_replace 但在这种情况下它不起作用,因为 ":" 之后的值可以是任何值。分解字符串也不起作用,因为 ":" 也可以出现在 html 文件的文本中。我认为这只能通过正则表达式来完成,所以建议我一些好的正则表达式也让我知道这是否可以通过任何其他方法来实现。

其他注意事项。

  1. 由于是用于模板解析,模板可以有多个 网址。
  2. 网址不会有任何查询字符串,但我会很感激 如果解决方案也支持它们。

【问题讨论】:

  • 如果内容可以是“任何东西”,它就不是正则,也不适合正则表达式。你想要的是一个合适的解析器。看看github.com/fabpot/Twig 一个不错的模板语言和一个不错的解析器。我什至建议您使用并扩展 Twig 以满足您的需求,而不是重新发明轮子。
  • 我已经提到我正在构建它是为了我的学习目的。我知道有很好的模板引擎,比如 smarty 等。 url 值也可以是任何值,但模式保持不变,所以我认为这可以使用正则表达式来实现。
  • preg_replace_callback() 是你的朋友。

标签: php regex string parsing


【解决方案1】:

然后出于学习目的:

preg_replace('/\{url:([^\}]*)\}/', $base_url.'$1', $string);

以及正则表达式的解释

  1. \{url:
  2. [^\}]* } 出现 0 次或更多次
  3. ([^\}]*) () 之间我们可以稍后引用它(参见'$1'
  4. \} }

只要你在学习:看看 http://www.regular-expressions.info/ 有关正则表达式的更多信息。他们真的很棒:D

【讨论】:

  • 谢谢。像魅力一样工作:)
猜你喜欢
  • 1970-01-01
  • 2015-11-11
  • 2020-02-24
  • 2022-01-04
  • 2017-03-01
  • 1970-01-01
  • 2011-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多