问题描述
我正在尝试在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)
演示:
更多信息: