java - 如何检查正则表达式以正则表达式开头和结尾

标签 java regex

我有用于捕获字符串的正则表达式,如果它们位于双引号之间并且不以 / 开头或结尾。

但是我想要的正则表达式解决方案。

The regex should not capture

条件 1. 捕获两个双引号或单引号之间的文本。 条件 2. 但它不应该捕获 if 以 [ 开头并以 ] 结尾 条件 3. 但如果以/"开头以/' 结尾或以/"开头以/' 结尾则不应该

示例:

正则表达式:\"(\/?.)*?\"

输入:Functions.getJsonPath(Functions.getJsonPath(Functions.getJsonPath(Functions.unescapeJson("test"), "m2m:cin.as"),"payloads_ul.test"),"[/"调光值/"]",输入["test"]["in"])

输出:

captured output:
1. "test"
2. "m2m:cin.as"
3. "payloads_ul.test"
4. [/"Dimming Value/"]
5. "test"
6. "in"

预期结果:

1. "test"
2. "m2m:cin.as"
3. "payloads_ul.test"
4. [/"Dimming Value/"]

条件1解释: 捕获双引号或单引号之间的文本。 例子: 输入:“测试”,“m2m:cin.as” 输出:“测试”,“m2m:cin.as”

条件2解释: 如果正则表达式位于以 [ 开头和以 ] 结尾之间,但它具有双引号或单引号,那么它也不应该捕获。

示例: 输入:[“测试”] 输出:它不应该捕获

条件3解释: 在输入 "[/"Dimming Value/"]" 的上述预期结果中,存在两次双引号,但仅捕获一个双引号,不包括 /"。因此,输出为 [/"Dimming Value/"]。像这样,我想要 if /' (单引号前面有/) .

注意: 对于输入 "[/"Dimming Value/"]"或 '[/'Dimming Value/']',这里虽然文本在双引号和单引号之间并且有 [] 它不应该忽略该字符串。输出应为[/“调光值/”]。

最佳答案

据我了解,您想要捕获双引号之间的文本,除了:

  • 如果开头双引号以 [ 为前缀,或结尾双引号以 ] 为后缀
  • / 为前缀的双引号不应作为匹配文本的开头或结尾

我不知道您是否还想捕获单引号之间的文本,因为您的文本不完全清晰。

要创建具有前缀字符负匹配的非捕获组,您需要一个负后向查找类型的组,其语法为(?<!您不需要的前缀),但这在 java 或 javascript 正则表达式引擎上不存在。

我构建的用于返回您想要的示例的最佳正则表达式(但仅适用于 PHP 或 python(您可以在网站 regex101.com 或类似网站上检查))是:

(?<![\[/])\"(?!\])(\/?.)*?\"(?![\]/])

我添加了“如果初始双引号后缀为 ] 则不匹配”的限制,以防止在文本 ["test"] 上匹配 "][" [“在”]

无论如何,这不会解决你的问题,因为它不能在 java 或 javascript 引擎中工作!

你有什么方法来处理结果,并排除不良匹配吗?

如果是这样,您可以匹配错误的前缀和错误的后缀并将其从结果中排除:

[\[]?\"(\/?.)*?\"[\]]?

这将返回:

"test"
"m2m:cin.as"
"payloads_ul.test"
"[/"Dimming Value/"]"
["test"]
["in"]

完整的 JavaScript 代码,包括 pos 处理:

'Functions.getJsonPath(Functions.getJsonPath(Functions.getJsonPath(Functions.unescapeJson("test"), "m2m:cin.as"),"payloads_ul.test"),"[/"Dimming Value/"]",input["test"]["in"])'
.match(/[\[]?\"(\/?.)*?\"[\]]?/g).filter(s => !s.startsWith('[') && !s.endsWith(']'))

这将返回:

"test"
"m2m:cin.as"
"payloads_ul.test"
"[/"Dimming Value/"]"

编辑: 等效的java代码:

CharSequence yourStringHere = "Functions.getJsonPath(Functions.getJsonPath(Functions.getJsonPath(Functions.unescapeJson(\"test\"), \"m2m:cin.as\"),\"payloads_ul.test\"),\"[/\"Dimming Value/\"]\",input[\"test\"][\"in\"])";
Matcher m = Pattern.compile("[\\[]?\\\"(\\/?.)*?\\\"[\\]]?")
        .matcher(yourStringHere);
while (m.find()) {
    String s = m.group();
    if (!s.startsWith("[") && !s.endsWith("]")) {
        allMatches.add(s);
    }
}

关于java - 如何检查正则表达式以正则表达式开头和结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59848521/

相关文章:

java - 正则表达式在 csv 字符串中查找值

javascript - 如何在 javascript 中使用正则表达式匹配并返回零?

Java正则表达式用于删除除模式之外的所有字符

python - CountVectorizer、scikit-learn 中的标记模式

java - 用 Java 创建简单的漫游人工智能?

Java Https 默认重试机制

python - 根据列名获取 pandas 数据框的子集

java - 给定范围内复杂度较低的素数

java - 选择您要显示的数据系列

java - SseEmitter 和 jackson 没有适合类 java.lang.String 的转换器