java - 在文件夹下的文件中搜索有效模式? (也许使用 Perl 或使用 Java 的一些 API 或其他任何东西)

标签 java regex perl jsp pattern-matching

我有一个文件夹,它的名称是v3 。该文件夹中有 jsp 文件,v3 文件夹中也有一些文件夹,该文件夹中也有 jsp 文件。

我的 jsp 文件夹有一些链接,如下所示:

<link rel="stylesheet" href="/static/css/main.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="/css<s:text name="scripts"/>/general_styles.css">
<link rel="stylesheet" type="text/css" href="/v3/css<s:text name="scripts"/>/something.css" >

和脚本:

<script language="javascript" type="text/javascript" src="/static/scripts/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="/scripts<s:text name="scripts"/>/prototype-1.6.0.2.js"></script>
<script language="javascript" type="text/javascript" src="/scripts<s:text name="scripts"/>/${a.name}/<s:text name="genericJs"/>"></script>

链接:

href应以 /static/ 开头例如,这是有效的:

<link rel="stylesheet" href="/static/css/main.css" type="text/css" />

对于脚本:

src应以 /static/ 开头例如,这也是有效的:

<script language="javascript" type="text/javascript" src="/static/scripts/jquery-1.4.2.min.js"></script>

我想要做什么,我想检测哪些文件有 not valid定义。

编辑:有效 - 无效是我公司系统的一个概念。我们正在将 css 和 js 文件夹移动到另一个文件夹,它们将位于一个文件夹下,该文件夹的名称为 v3。

程序将像这样工作:

  • jsp文件位于 v3 文件夹下。我将从任何地方运行该程序,它将检查该文件夹下的所有 jsp 文件(我将在编写的程序中定义该 v3 文件夹的整个路径)。

  • 它将找到所有以 <link 开头的行和<script .

  • 如果是<link它会找到href="

  • 如果是<script它会找到src="

  • 找到其中一个后,它会检查它是否以 /static/ 开头。或不。

  • 如果启动就可以,但如果不启动,它会将文件名写入输出/文本文件或其他任何内容。

最佳答案

您可以查看ack ,它是基于 Perl 的 grep 替代品,应该能够完成您想要的操作。

说实话,您不想在 [xht]ml 上进行模式匹配,您想使用解析器。使用 HTML::TokeParser 的 Perl 脚本可以找到所有具有特定属性的标签。

这是一个快速模型,但您可能需要一些更有用的输出:

#!/usr/bin/perl

use strict;

use warnings;

use File::chdir;
use Cwd 'abs_path';

use HTML::TokeParser;

my @paths = @ARGV;
my @files;

foreach my $path (@paths) {
  local $CWD = $path;
  opendir( my $dh, $CWD);
  push @files, map { abs_path($_) } grep {/\.jsp$/} readdir $dh;
}

foreach my $file (@files) {
  my $parser = HTML::TokeParser->new($file);

  while (my $tag = $parser->get_tag("link", "script")) {

    if ($tag->[0] eq "link" and exists $tag->[1]{'href'}) {
      print "$file\n" unless $tag->[1]{'href'} =~ m#^/static/#;

    } elsif ($tag->[0] eq "script" and exists $tag->[1]{'src'}) {
      print "$file\n" unless $tag->[1]{'src'} =~ m#^/static/#;
    }

  }  

}

关于java - 在文件夹下的文件中搜索有效模式? (也许使用 Perl 或使用 Java 的一些 API 或其他任何东西),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5418471/

相关文章:

regex - 插入符号不适用于 grep

perl - 如何在 perl 中使用数组索引删除单词?

java - 正则表达式从忽略现有标签的 HTML 字符串中删除大于 > 和小于 < 的字符

perl - 是否可以使用 grep 函数过滤文本文件中的实数?

python - Perl 相当于 pip freeze

java - 可以从 Glass 发送 HTTP 请求吗?

java - Java 中的 Processbuilder 不会抛出子流程异常

java - 什么时候说语句是单次进入/单次退出,什么时候不是?

java - 运行 Maven OSGi 项目时出错

javascript - C++ 和 JS RegEx 等价于\p{L}