Coldfusion:如何使用正则表达式提取子字符串

时间:2012-10-18 04:43:08

标签: regex string coldfusion coldfusion-8

我有一个字符串,其中包含一些双引号子字符串,即“字符。双引号之间是我想要的数据。

如何编写正则表达式以从中提取“我想要的第一个数据”和“我想要的第二个数据”:

'带有“我想要的第一个数据”的字符串和“我想要的第二个数据”'

我尝试了以下代码。

<cfset mydata = 'some string with "the first data i want" and "the second data i want"'/>

<cfset arrData = ListToArray(mydata ,'"') />

1 个答案:

答案 0 :(得分:5)

据推测,你可以做一些微不足道的事情:

<cfset matches = REMatch('"([^"]*)"', mydata) />
<cfdump var="#matches#" label="Example REMatch" />

不幸的是,这也将包括Match中的双引号,而ColdFusion的正则表达式引擎相当陈旧和劣质,因此它不支持Lookaheads / Lookbehinds。

双引号可以轻松替换,但如果你真的想使用前瞻和后视,你可以使用Java自己的模式库。

<cfset matches = [] />
<cfset pattern = CreateObject("java","java.util.regex.Pattern").Compile('(?<=")[^"]*(?=")') />
<cfset matcher = pattern.Matcher(mydata) />
<cfloop condition="matcher.Find()">
    <cfset ArrayAppend(matches, matcher.Group()) />
</cfloop>

<cfdump var="#matches#" label="Example of Java Regex" />