gpt4 book ai didi

javascript - 将 JS RegExp 对象转换为 Java 中的 Pattern 对象

转载 作者:行者123 更新时间:2023-12-02 09:14:54 25 4
gpt4 key购买 nike

所以我在 JS 中有这些 Regex Objs

const itemModelRegEx = new RegExp
(/^(item1|item2|item3|item4)(-)(\d{4}((0[1-9])|(1[0-2]))(0[1-9]|[1-2][0-9]|3[0-1]))(?:.*)/, 'i',);

const dateRegex = new RegExp(/(20\d{2})([0-1]\d)([0-3]\d)/i);

目前我正在尝试将它们转换为 Java:

String regexOne = "^(item1|item2|item3|item4)(-)(\d{4}((0[1-9])|(1[0-2]))(0[1-9]|[1-2][0-9]|3[0-1]))(?:.*)"
Pattern itemModelRegEx = Pattern.compile(regexOne);

Pattern dateRegex = Pattern.compile("(20\d{2})([0-1]\d)([0-3]\d)");

但是,这似乎并不正确。这里正确的转换是什么样的?相同的通配符适用吗?我从开头和结尾删除了“/”,但是模式中的“\”应该以不同的方式设置吗?

最佳答案

正则表达式中的任何 \" 都需要转义为 Java 字符串文字。

final Pattern itemModelRegEx = Pattern.compile(
"^(item1|item2|item3|item4)(-)(\\d{4}((0[1-9])|(1[0-2]))(0[1-9]|[1-2][0-9]|3[0-1]))(?:.*)",
Pattern.CASE_INSENSITIVE);
final Pattern dateRegex = Pattern.compile(
"(20\\d{2})([0-1]\\d)([0-3]\\d)",
Pattern.CASE_INSENSITIVE);

i 标志是 CASE_INSENSITIVE 标志,可以像上面的 JS 代码和 Java 代码中那样单独指定。它也可以作为 (?i) 嵌入到正则表达式本身中,尽管为第二个模式指定它没有意义,因为它只匹配数字:

final Pattern itemModelRegEx = Pattern.compile(
"(?i)^(item1|item2|item3|item4)(-)(\\d{4}((0[1-9])|(1[0-2]))(0[1-9]|[1-2][0-9]|3[0-1]))(?:.*)");
final Pattern dateRegex = Pattern.compile(
"(20\\d{2})([0-1]\\d)([0-3]\\d)");

关于javascript - 将 JS RegExp 对象转换为 Java 中的 Pattern 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59079901/

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