在以下情况下,我如何使用Regex读取第四个值(在“”内部,即“ vV0 ....”?)?
我将对此部分进行更新-是否可以先找到单词“ LaunchFileUploader”,然后选择第4个值,如果文件中有多个LaunchFileUploader实例,则只需选择找到的第一个单词的第4个值?在需要搜索的文件上附加屏幕截图(文件中的单词为“ LaunchFileUploader”)
我尝试了这个,但是它给出了-我需要第4个值(第1组给我第三个值)
\bLaunchFileUploader\b(\:?.*?,){3}.*?\)
Match 1
Full match 11030-11428 LaunchFileUploader("ERM-1BLX3D04R10-0001", 1662, "2ecbb644-34fa-4919-9809-a5ff47594c2d", "8dZOPyHKBK...
Group 1. n/a "2ecbb644-34fa-4919-9809-a5ff47594c2d",
我仍在寻找解决方案。感谢您的帮助。
答案 0 :(得分:1)
根据可用的功能,有两种方法可以实现。
无论哪种方式,如果字符串中没有新行,仅是简单的("value1","value2","value3","value4")
等,这样做会更好。它仍然可以工作,但是您可能需要从结果字符串中清除一些新行。
最简单的方法-在最困难的部分使用代码。抓取内部字符串:
(?<=\().*?(?=\))
这将获得介于两个括号之间的所有内容(使用正视)。在代码中,您可以在,
上拆分/分解此字符串,并获取第4个项目。
如果您想在正则表达式中完成所有操作,则可以使用以下方式:
(?<=\()(?:.*?,){3}(.*?)(?=\))
这将a)匹配括号的全部内容,并且b)捕获捕获组中的第四个选项。要更深入:
(?<=\()(?:.*?,){3}\"(.*?)\"(?=\))
仅捕获""
引号的内容。
有些工具不允许您使用环视,如果是这种情况,请告诉我,我会看看周围还有哪些其他方式。
编辑在浏览器的JS控制台中运行它。绝对可以。
编辑2 我看到您已使用实际搜索的文本更新了问题。按照上面的复制/粘贴操作,此模式将包含空格和换行符文字。
(?<=\(\")(?:.*?,\s?\n?){3}\"(.*?)\"(?=\))
在控制台中查看我的第二张图片
答案 1 :(得分:1)
这适用于python和PHP:
(?<=\")(.*)(?:\"\);)\Z
Demo for Python and PHP
对于Java,将\Z
替换为$
,如下所示:
(?:")(.*)(?:\"\);)$
Demo for JavaScript
注意:请务必查看 捕获的组 ,而不是匹配的组。
更新:
尝试此更新请求:
"(.*)"(?:[\\);\] \/>}]*)$
Demo for updated input string
所有上述正则表达式模式都假定每个逗号后都有换行符
自动生成的Java代码:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
final String regex = "\"(.*)\"(?:[\\\\);\\] \\/>\\}]*)$";
final String string = "\n"
+ "}$(document).ready( function(){ PathUploader\n"
+ " (\"ERM-1BLX3D04R10-0001\", \n"
+ " 1662, \n"
+ " \"1bff5c85-7a52-4cc5-86ef-a4ccbf14c5d5\", \n"
+ "\"vV0mX3VadCSPnN8FsAO7%2fysNbP5b3SnaWWHQETFy7ORSoz9QUQUwK7jqvCEr%2f8UnHkNNVLkJedu5l%2bA%2bne%2fD%2b2F5EWVlGox95BYDhl6EEkVAVFmMlRThh1sPzPU5LLylSsR9T7TAODjtaJ2wslruS5nW1A7%2fnLB%2bljZaQhaT9vZLcFkDqLjouf9vu08K9Gmiu6neRVSaISP3cEVAmSz5kxxhV2oiEF9Y0i6Y5%2f5ASaRiW21w3054SmRF0rq3IwZzBvLx0%2fAk1m6B0gs3841b%2fw%3d%3d\"); } );//]]>";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}