当前位置: 首页 > 知识库问答 >
问题:

我需要改进我的Powershell正则表达式来找到特定System.out.println模式的Java代码

蓝昊然
2023-03-14

我们正在尝试扫描一个包含html、xml和java文件的大型文件库,这些文件都可以包含System.out.println.的Java代码。问题是我需要找到一组特定的代码示例。

示例1:System.out.println("我的工作代码是:"var.jobcode);

示例2:<代码>系统。出来println(“我的jc是:”var.jc)

例3:<代码>系统。出来println(“我的jbc是:”var.jbc)

我试图用以下方法得到这个:

Get-ChildItem C:\my\folder\path -Recurse | Where-Object FullName -Match ".*C:\\my\\folder\\path*" | Where-Object FullName -Match ".*." | Select-String -Pattern '(System\.out\.println+(.*?job)\/?[^)]+[)]\s*;)|(System\.out\.println+(.*?jc)\/?[^)]+[)]\s*;)|(System\.out\.println+(.*?jbc)\/?[^)]+[)]\s*;){99}' -List | Select Path,Line

我得到了我想要的文件,但我也得到误报,因此具有以下行的文件错误地出现在结果中。

System.out.println ("component printout: item"); System.out.println ("");                 <td style="word-break: break-all;word-wrap:break-word;font-size:12px;" class="FONTSTYLE" align="left">Job Codes</td><td style="word-break: break-all;word-wrap:break-word;font-size:12px;" class="FONTSTYLE" align="left">

因此,只要文件有一个系统。出来println();节后面跟有任何单词“job”,该文件在不应该时也会被拾取。

我必须半定期地在几千个文件上运行它,并且需要输出文件路径/名称并在违规代码所在的行中。

我如何清理这个正则表达式,使其更具体,只包含具有上面示例中的行的文件,而不拾取其他文件?

共有1个答案

吕和风
2023-03-14

关于您尝试的模式的一些注释:

  • 您有3个替换,其中唯一的区别是应该出现的单词。您可以在非捕获组中为这些单词使用带有交替的单一模式
  • 使用println匹配printl后跟1次或多次nchar
  • 非贪心点. *? 可能过度匹配,因为点也可以匹配"and
  • 量词{99}重复整个分组部分正好99次,最后一次交替似乎有点偏离模式。

您可以使模式更具体一些:

System\.out\.println\("[^":]*\s(?:job|jb?c)\s[^"]+"[^)]*\);

查看regex演示。

 类似资料:
  • 我是新的Sublime的文本,但开始喜欢在它的工作。 我使用它的搜索和替换来实现如下: 我有一个清单,上面有数百个项目,如下所示: 但我想用 所以基本上冒号和单词应该用连字符(-)符号代替 我尝试了几个正则表达式。例如:(?)? 但事情并不顺利。

  • 问题内容: 我有这个正则表达式使用向前和向后的前瞻: 我正在尝试将其从C#移植到Python,但始终收到错误 是否有可能用Python重写而不会失去意义? 这个想法是为了匹配类似 更新资料 我正在使用环顾四周解析已修改的HTTP多部分文本 我想在进行拆分时只获取文件路径和其他文本,而不必删除开始和结束标签 简短的代码很重要,但是如果它使正则表达式可行,我愿意更改格式。 问题答案: 对于同一数组中的

  • 我需要一个正则表达式来检查和删除< code > membership user < code > userName 中的特殊字符。 当我第一次将网站设置为测试版时,我没有考虑到特殊字符不是获取用户名的好方法,“在我的应用程序中”。 下面我有一段模板代码,写得不太正确,但是给了愿意帮助的人一个好的开始。 --我需要从用户名中删除所有特殊字符和空格,同时更新用户名。 当我说我所说的特殊字符~、`、!

  • 问题内容: 我需要这件事的帮助。查看以下正则表达式: 我想查找这样的词:“自制”,“ aaaa-bbb”而不是“ aaa-bbb”,而 不是 “ aaa–aa–aaa”。基本上,我想要以下内容: 单词-连字符-单词。 它适用于所有内容,但该模式会通过:“ aaa–aaa–aaa”,但不应通过。哪种正则表达式适用于此模式? 问题答案: 可以从表达式中删除反斜杠: 下面的代码应该工作 请注意,您可以使

  • 问题内容: 我在包含一些文本的文本文件中有字符串,如下所示: 我希望在类名之前获取所有内容。 我已经尝试了以下方法,但是我不知道该如何摆脱 我得到以下信息: 而不是我想要的: 关于如何解决此问题的任何指示? 问题答案: 如果不使用捕获组,则可以使用超前(业务)。 应该捕获您想要的一切。这里是细分的:

  • 我需要编写一个具有以下规则的正则表达式: null null 这些示例无效: > 12--11(因为它包含两个连字符) 1-2345(因为它包含5号) <>是字符出现在最后一个位置,那么在字符之前必须有一个数字not hypen。 即11-A(必须不及格)11-1A(必须及格)