我有用于捕获字符串的正则表达式,如果它们位于双引号之间并且不以 /
开头或结尾。
但是我想要的正则表达式解决方案。
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/