【问题标题】:Coldfusion Regex get strings between tagsColdfusion Regex 获取标签之间的字符串
【发布时间】:2013-05-06 09:23:41
【问题描述】:

我们目前在我们的应用程序上定义了一些应用程序变量,并且在我们的模板中处理了一组特殊的标签。但是我发现拆分标签有点困难,所以我可以在模板解析时将它们转换为应用程序变量。

<cfset mystring = "[pss]'fetchMessages','VWO-Tracking-Code'[end_pss]">
<cfset the_match = REMatch("\[pss\]\s*(((?!\[pss\]|\[end_pss\]).)+)\s*\[end_pss\]",mystring) />
<cfdump var="#the_match#" />

我们的目标是拆分“[pss] 和 [end_pss]”之间的字符串

上面的正则表达式只是简单地将字符串应用到 CF 数组中,这一切都很好。但是我严格想要它之间的代码,因为我可以将它转换为

<cfset application.snippets['VWO-Tracking-Code']>

现在它将所有内容都作为一个字符串返回,我还需要第一部分来确定需要什么类型的功能。

任何关于如何做到这一点的想法将不胜感激。

我们目前使用的是 CF 8,代码的结构一直完全相同。唯一的问题是它也可以包含在其他代码字符串中......

【问题讨论】:

  • “唯一的问题是它也可以包含在其他代码字符串中......” - 你的意思是它可以嵌套?处理嵌套结构时,正则表达式成为一个糟糕的选择......
  • 关于 “但是我非常想要它之间的代码”“我也需要第一部分” - 你需要更清楚 具体你需要什么。 “第一部分”是pss 还是fetchMessages。如果是后者,pss 是静态字符串吗?这是什么上下文 - 即[ 可以出现在标签之外吗? mystring 是整个字符串还是子字符串的一部分?

标签: regex coldfusion coldfusion-8


【解决方案1】:

如果您只对一组标签执行此操作,则可以使用 replaceList 函数而不是 regEx

<cfset mystring = "[pss]'fetchMessages','VWO-Tracking-Code'[end_pss]">
<cfset mystring = replaceList(mystring,"[pss],[end_pss],'",'')>
<cfset firstitem = listfirst(mystring)>
<cfset seconditem = listlast(mystring)>
<cfdump var="#firstitem#">
<cfdump var="#seconditem#">

这会输出fetchMessagesVWO-Tracking-Code。如果您想要/需要字符串中的单引号,则可以从 replaceList 函数的第二个参数中删除 ,'

【讨论】:

  • 可以通过将其视为引号分隔列表来获取这两个值 - 即 ListGetAt(mystring,2,"'")ListGetAt(mystring,4,"'") (或者如果引号很重要,请使用 ,[] 作为分隔符并获取位置 2 和3).
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 2016-07-12
  • 2021-04-18
  • 2015-06-24
  • 2014-11-07
  • 2016-05-12
相关资源
最近更新 更多