使用JS223 Groovy脚本的Regex编译错误

问题描述

我正在尝试在JS223后处理器中使用Groovy脚本从以下字符串中返回“镇”和“萨克拉曼多文档存储库”:

documentRepository|Town\|Sacramento Document Repository|A58D876A581D6A4F297703D9EA443775

我已经在https://regex101.com/中测试了以下两个正则表达式,它们可以正常工作:

\|(.+?)\\ - returns "Town"
\\\|(.+?)\| - returns "Sacramento Document Repository" 

但是JS223处理器中的两个正则表达式编译失败:

String REGEX1 = "\|(.+?)\\";
String REGEX2 = "\\\|(.+?)\|";

我回来的错误是:

javax.script.ScriptException: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Script85.groovy: 10: unexpected char: '\' @ line 10,column 17.
   String REGEX = "\|(.+?)\\";

我怀疑问题与转义反斜杠有关。有人可以建议吗?

解决方法

尝试使用以下语法:

 Pattern myRegex = ~/regex/

本文所述:

这不需要任何转义,因为它是分隔为正则表达式制作的字符串的常规方法之一。

确保您导入软件包:

 import java.util.regex.*
,

您需要在正则表达式中转义meta characteres才能更改此内容:

\|(.+?)\\

对此:

\\|(.+?)\\\\

您还可以使用Groovy的Find Operator和更少的令人恐惧的语法。

类似的东西:

def source = 'documentRepository|Town\\|Sacramento Document Repository|A58D876A581D6A4F297703D9EA443775'

def matches = (source =~ '(?<=\\|)[^|]*(?=\\|)')
def town = matches[0]
def sacramento = matches[1]

log.info('Town: ' + town)
log.info('Sacramento: ' + sacramento)

演示:

enter image description here

更多信息:

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...