Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Coldfusion:如何使用正则表达式提取子字符串_Regex_String_Coldfusion_Coldfusion 8 - Fatal编程技术网

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],“”)
在每个示例代码上删除引号。更多信息: