正则表达式前缀外观不适用于coldfusion 10

时间:2015-05-04 08:54:16

标签: regex coldfusion coldfusion-10

我正在使用reMatch从列表中获取匹配的子字符串。但是当我使用前缀环视时,我收到了错误。

  

序列(?< ...)无法识别

代码:

<cfset local.path = "schedule.category.classes.name,schedule.category.classes.id">
<cfset local.regex = "(?<=schedule.category.classes.)[a-zA-Z0-9_]*?(?=,|$)">
<cfset local.output = reMatch(local.regex, local.path)>

我错过了什么?

2 个答案:

答案 0 :(得分:4)

你错过了阅读文档的内容;-) - Regular expression syntax - Using special characters - 看看背后&amp; CFML的正则表达式(长期死亡Apache ORO)不支持arounds。

然而,使用java的正则表达式实现很容易, 支持后视:java.util.regex.Pattern - Special constructs (named-capturing and non-capturing)

我已经编写了关于在CFML中使用Java正则表达式的三部分系列的两部分:“Regular expressions in CFML (part 9: Java support for regular expressions (1/3))”。我必须在某个时候回到第3部分,但无论如何你需要的是第一部分。

Ben Nadel还撰写了大量关于在CFML中使用Java正则表达式的文章。如果你因为看了@我的笔记而陷入困境,那就去做一个快速的谷歌(但如果你这样做,请告诉我你被困的地方,所以我可以重新审视我的措辞!)。

答案 1 :(得分:1)

Coldfusion正则表达式模式中没有后视镜。您可以使用reMatch删除需要获取的字符串周围的所有内容,而不是REReplace

<cfset local.path = "schedule.category.classes.name,schedule.category.classes.id">
<cfset local.regex = "schedule\.category\.classes\.([a-zA-Z0-9_]+).*$">
<cfset local.output = REReplace(local.path,local.regex,"\1")>