特殊字符的正则表达式

时间:2013-04-02 20:04:10

标签: java regex

我正在尝试使用以下方法编写正则表达式以检查文本段落中的特殊字符(包括“script”和“javascript”关键字):

"(script)|(javascript)|([/'()&<>^~`|\"])"

但如果我用它混合字母,这不起作用。假设我输入<,它会检测到但如果我输入<s,则无法检测到。

2 个答案:

答案 0 :(得分:2)

试试这个:

".*(script|javascript|[/'()&<>^~`|\"]).*"

我在正则表达式之前和之后添加了.*

这意味着:

  • 零个或多个任何角色
  • 后跟任何特殊字符(或模式)
  • 后跟零个或多个任何字符

这应该允许你的正则表达式匹配这样的模式:

aaaa<
aaaa<a
<aaaaa
<
xscript
scriptx
xxscriptxx

这是另一种方法:

static final Pattern INVALID_CHARS = Pattern.compile("[/'()&<>^~`|\"]");

boolean isInvalid(String s) {
    if (s.indexOf("javascript") != -1) {
        return true;
    }
    if (s.indexOf("script") != -1) {
        return true;
    }
    if (INVALID_CHARS.matcher(s).find()) {
        return true;
    }
    return false;
}

答案 1 :(得分:0)

它不会检测到'&lt; s',因为它不是为了设计的。

所有要做的就是匹配“javascript”的一个实例,“脚本”的一个实例或这些特殊字符中的一个。

如果你想要它来检测'&lt; s;你需要使用*或+ ......类似

((script)|(javascript)|([/'()&<>^~`|\"]))+

虽然它不匹配'&lt; s',但它将匹配'&lt; script'