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

lam*_*pie 1 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 ,'"') />
Run Code Online (Sandbox Code Playgroud)

Jas*_*rke 5

大概你可以做一些像这样的小事:

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

不幸的是,这也将包括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" />
Run Code Online (Sandbox Code Playgroud)