gpt4 book ai didi

Java正则表达式讨论2

转载 作者:行者123 更新时间:2023-12-01 15:40:30 25 4
gpt4 key购买 nike

将此模式用于正则表达式:

Pattern p = Pattern.compile("[^\\.](?s)executeRule\\(\\s*?(.+?),\\s*?('.+?'),\\s*(\\[.+?\\]\\s*\\);)");

我有这样的文字:

setSomething(false);
executeRule(document, 'PublishDocumentsToEmail', [
'xmlMapping':'xmlmapping.TagRegLike',
'emailAddress':'EMAIL(mymail@mail.com)',
'emailSubject':'Test',
'emailText':'test',
'filenameSuffix':'test']
);

System.out.println("bla");

executeRule(document, 'PublishDocumentsToJMS', [
'xmlMapping':'xmlmapping.TagRegLike',
'emailAddress':'EMAIL(mymail@mail.com)',
'emailSubject':'Test',
'emailText':'test',
'filenameSuffix':'test']
);

我想找到包含executeRule 模式的序列。我的正则表达式仅成功找到第一个模式出现;第一个模式之后的所有模式都将包含之前的模式。

例如我第一次解析时发现

executeRule(document, 'PublishDocumentsToEmail', [
'xmlMapping':'xmlmapping.TagRegLike',
'emailAddress':'EMAIL(mymail@mail.com)',
'emailSubject':'Test',
'emailText':'test',
'filenameSuffix':'test']
);

我对图案做了一些替换,所以它变成了

executeRule(document, 'PublishDocumentsToEmail', [
'xmlMapping':'xmlmapping.TagRegLike',
'emailAddress':'EMAIL(mymail@mail.com)',
'emailSubject':'Test',
'emailText':'test',
'filenameSuffix':'test']
,crs
);

此后,我使用新文本递归调用相同的解析方法,即

setSomething(false);
executeRule(document, 'PublishDocumentsToEmail', [
'xmlMapping':'xmlmapping.TagRegLike',
'emailAddress':'EMAIL(mymail@mail.com)',
'emailSubject':'Test',
'emailText':'test',
'filenameSuffix':'test']
,crs
);

System.out.println("bla");

executeRule(document, 'PublishDocumentsToJMS', [
'xmlMapping':'xmlmapping.TagRegLike',
'emailAddress':'EMAIL(mymail@mail.com)',
'emailSubject':'Test',
'emailText':'test',
'filenameSuffix':'test']
);

我的正则表达式将匹配

中的整个部分
executeRule(document, 'PublishDocumentsToEmail', [
'xmlMapping':'xmlmapping.TagRegLike',
'emailAddress':'EMAIL(mymail@mail.com)',
'emailSubject':'Test',
'emailText':'test',
'filenameSuffix':'test']
,crs
);

System.out.println("bla");

executeRule(document, 'PublishDocumentsToJMS', [
'xmlMapping':'xmlmapping.TagRegLike',
'emailAddress':'EMAIL(mymail@mail.com)',
'emailSubject':'Test',
'emailText':'test',
'filenameSuffix':'test']
);

如何让它只匹配我的第二个模式?

谢谢

最佳答案

我没有彻底阅读您的示例,但您可以在模式中使用 \G 在最后一个匹配之后开始,或者在使用 Matcher#find() 时循环匹配.

希望有帮助。

更新:

After this I recursively call the same parsing method with the new text which is ...

为什么要递归调用它?我没有看到任何递归,因此您可能只是迭代在第​​一次调用中找到的匹配项。

关于Java正则表达式讨论2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8122008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com