Regex Coldfusion:如何使用正则表达式提取子字符串
我有一个字符串,其中有一些双引号的子字符串,“字符。在双引号之间是我想要的数据 如何编写正则表达式从中提取“我想要的第一个数据”和“我想要的第二个数据”: '带有“我想要的第一个数据”和“我想要的第二个数据”的字符串' 我尝试了以下代码Regex Coldfusion:如何使用正则表达式提取子字符串,regex,string,coldfusion,coldfusion-8,Regex,String,Coldfusion,Coldfusion 8,我有一个字符串,其中有一些双引号的子字符串,“字符。在双引号之间是我想要的数据 如何编写正则表达式从中提取“我想要的第一个数据”和“我想要的第二个数据”: '带有“我想要的第一个数据”和“我想要的第二个数据”的字符串' 我尝试了以下代码 <cfset mydata = 'some string with "the first data i want" and "the second data i want"'/> <cfset arrData = ListToArray(my
<cfset mydata = 'some string with "the first data i want" and "the second data i want"'/>
<cfset arrData = ListToArray(mydata ,'"') />
大概你可以做一些琐碎的事情,比如:
<cfset matches = REMatch('"([^"]*)"', mydata) />
<cfdump var="#matches#" label="Example REMatch" />
不幸的是,这也将包括匹配中的双引号,并且ColdFusion的正则表达式引擎非常陈旧和劣质,因此它不支持Lookaheads/Lookbehinds
双引号可以很容易地替换,但是如果您真的想使用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" />
大概你可以做一些琐碎的事情,比如:
<cfset matches = REMatch('"([^"]*)"', mydata) />
<cfdump var="#matches#" label="Example REMatch" />
不幸的是,这也将包括匹配中的双引号,并且ColdFusion的正则表达式引擎非常陈旧和劣质,因此它不支持Lookaheads/Lookbehinds
双引号可以很容易地替换,但是如果您真的想使用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" />
IIRC,ColdFusion的正则表达式引擎可以“向后看”,但不能“向前看”。或者反过来……它可以做其中之一。CF的正则表达式引擎是ApacheORO,它可以向前看,但不能向后看。然而,在这种情况下,您可能实际上不需要向前看/向后看,因为它们是零宽度的结构,它们不会使用给我引号,因此您的第二个示例代码也将在matches数组中包含`and`(因此它并不比ListToArray好多少)。只需使用“[^”]+”
进行匹配,然后或ListFirst(匹配[i],“”)
在每一个上删除引号。更多信息:IIRC,ColdFusion的正则表达式引擎可以“向后看”但不能“向前看”。或者反过来……它可以做其中一个。CF的正则表达式引擎是Apache ORO,它可以向前看但不能向后看。但是,在这种情况下,您可能实际上不需要向前看/向后看,因为ey是零宽度结构,它们不使用引号,因此您的第二个示例代码也将在matches数组中包含`and`(因此它并不比ListToArray好多少)。只需使用“[^”]+”
进行匹配,然后或ListFirst(匹配[i],“”)
在每个示例代码上删除引号。更多信息: