regex - Java 8中索引附近的未知后视组,用于命名正则表达式组
问题描述
我有一个试图在 Java 8 中解析的模式,但我不知道我做错了什么。我正在尝试创建命名的分组正则表达式。蚂蚁帮助将不胜感激。
public class Test {
public static void main(String[] args) {
String p = ".*(/p/(?<listingId>[a-zA-Z0-9\\-].*)/(?< sellerOfferId>[a-zA-Z0-9\\-])(/)?$";
Pattern.compile(p);
}
}
这会引发错误
Exception in thread "main" java.util.regex.PatternSyntaxException: Unknown look-behind group near index 66
.*(/p/(?<listingId>[a-zA-Z0-9\-].*)/(?< sellerOfferId>[a-zA-Z0-9\-])(/)?$
^
at java.util.regex.Pattern.error(Pattern.java:1924)
at java.util.regex.Pattern.group0(Pattern.java:2829)
at java.util.regex.Pattern.sequence(Pattern.java:2018)
at java.util.regex.Pattern.expr(Pattern.java:1964)
at java.util.regex.Pattern.group0(Pattern.java:2854)
at java.util.regex.Pattern.sequence(Pattern.java:2018)
at java.util.regex.Pattern.expr(Pattern.java:1964)
at java.util.regex.Pattern.compile(Pattern.java:1665)
at java.util.regex.Pattern.<init>(Pattern.java:1337)
at java.util.regex.Pattern.compile(Pattern.java:1022)
at com.myproject.test.Test.main(Test.java:9)
解决方案
您的正则表达式似乎有两个问题。
sellerOfferId
首先,在命名组之前有一个不需要的空间。)
其次,末尾缺少一个使括号平衡的地方。
一旦你解决了这个问题,你的 Pattern 就不再给出任何错误。试试这个更新的 Java 代码,
String p = ".*(/p/(?<listingId>[a-zA-Z0-9\\-].*)/(?<sellerOfferId>[a-zA-Z0-9\\-])(/)?$)";
^ removed space here ^ put this missing )
Pattern.compile(p);
现在它不再给PatternSyntaxException
.
推荐阅读
- logstash - Filebeat 到 Logstash -InvalidFrameProtocolException
- c# - 未虚拟化项目时与 UI 的交互缓慢
- android - Android 管理 API 和 VpnService
- highcharts - 在 dotnet highcharts 中点击 DRILLEDOWN PIE Charts 后打开柱形图
- eclipse - 如何覆盖应用和恢复默认值
- java - 在串口上发送和接收响应
- php - 通过joomla中的媒体管理器上传时如何允许unicode?
- testng - TestNG 6.12+ 中未执行的测试方法
- javascript - 使用订阅的返回值来创建可订阅的承诺
- pgadmin - PGAdmin 中的查询参数