Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中过滤掉除了单词、数字和一些符号之外的所有内容?_Java_Regex - Fatal编程技术网

如何在Java中过滤掉除了单词、数字和一些符号之外的所有内容?

如何在Java中过滤掉除了单词、数字和一些符号之外的所有内容?,java,regex,Java,Regex,所以我们有一个数据库列,它可以包含任何内容。Unicode、数字、单词等 但是,我们需要将数据发送到外部服务,他们对接受的内容非常严格。基本上,只有英语、单词、数字等 我们无法更改此服务的要求,因此我们需要先筛选用户发送给我们的内容,然后再发送给他们 我的正则表达式技能很弱。我们需要的是: 字符[a-zA-Z] 数字[0-9] 以下符号:!@$%^&*()-_=+;:',./?\ 就这样。当然,它可以是任何组合。我们只是想确保没有任何东西是没有列出的 任何关于如何用Java构建这个过滤器的帮助都

所以我们有一个数据库列,它可以包含任何内容。Unicode、数字、单词等

但是,我们需要将数据发送到外部服务,他们对接受的内容非常严格。基本上,只有英语、单词、数字等

我们无法更改此服务的要求,因此我们需要先筛选用户发送给我们的内容,然后再发送给他们

我的正则表达式技能很弱。我们需要的是:

字符[a-zA-Z] 数字[0-9] 以下符号:!@$%^&*()-_=+;:',./?\

就这样。当然,它可以是任何组合。我们只是想确保没有任何东西是没有列出的

任何关于如何用Java构建这个过滤器的帮助都将不胜感激

顺便说一句,我假设相同的正则表达式模式也适用于JavaScript

编辑

这是我的示例(使用Edmastermind29):

好吧,我知道怎么逃出那根绳子了。但是我怎样才能得到所有没有被过滤掉的东西呢?

[A-Za-z0-9!@$%^&*()\-,./?\]*

接受任意数量的大小写字符、任意数量的数字和任意数量的下列符号
!@$%^&*()-_=+;:',./?\如您在帖子中所述。

[A-Za-z0-9!@$%^&*()\-\=+;:',./?\]*


接受任意数量的大小写字符、任意数量的数字和任意数量的下列符号
!@$%^&*()-_=+;:',./?\
如您在文章中所述。

在Javascript中,您只需构造一个onSubmit函数,该函数与正则表达式
/^[A-Za-z0-9!@#$%^&*()-\u=+:',./?\]$/
匹配到输入,如果返回false,则不允许提交表单


注意,在Javascript中必须转义“\”字符

,只需构造一个与正则表达式
/^[A-Za-z0-9!@$%^&*()-“=+;:”,./?\]$/匹配的onSubmit函数,如果返回false,则不允许提交表单


注意,您必须转义“\”字符,您需要迭代每个匹配的子序列并连接字符串。 对于给定的示例,解决方案如下所示:

public static void main( String[] args ) {
  String pattern = "[A-Za-z0-9!@#$%^&*()-_=+;:',./?\\ ]*";
  String text = "Hello, I need everything in this string except the { or }";

  Pattern p = Pattern.compile( pattern );
  Matcher m = p.matcher( text );
  StringBuilder sb = new StringBuilder();
  while( m.find() )
  {
     sb.append( m.group() );
  }
  String result = sb.toString();
  System.out.println( "Result: '" + result + "'" );
}

您需要迭代每个匹配的子序列并连接字符串。 对于给定的示例,解决方案如下所示:

public static void main( String[] args ) {
  String pattern = "[A-Za-z0-9!@#$%^&*()-_=+;:',./?\\ ]*";
  String text = "Hello, I need everything in this string except the { or }";

  Pattern p = Pattern.compile( pattern );
  Matcher m = p.matcher( text );
  StringBuilder sb = new StringBuilder();
  while( m.find() )
  {
     sb.append( m.group() );
  }
  String result = sb.toString();
  System.out.println( "Result: '" + result + "'" );
}

[a-zA-Z0-9!@$%^&*()\-\-\+;:',./?\]*
?为什么要添加标记“java”?因为这是我需要用Java解决的问题。但我以后也会用Javascript来做。我想知道是否可以在这两种语言中使用相同的正则表达式模式,但Java解决方案更为重要。@cbmeek在这种情况下,它将在两种语言中都能工作。btw,您可以将
a-zA-Z0-9
\uu
合并为
\w
。请注意,在Java代码中,您需要避开反斜杠:
\\w
[a-zA-Z0-9!@$%^&*()\-\=+;:',./?\]*
?为什么要添加标记“Java”?因为这是我需要用Java解决的问题。但我以后也会用Javascript来做。我想知道是否可以在这两种语言中使用相同的正则表达式模式,但Java解决方案更为重要。@cbmeek在这种情况下,它将在两种语言中都能工作。btw,您可以将
a-zA-Z0-9
\uu
合并为
\w
。请注意,在Java代码中,您需要转义反斜杠:
\\w
。顺便说一句:我必须在模式中包含“空格”字符才能得到预期的结果。这似乎非常有效。我授予您答案是因为您更正了我的代码。:-)顺便说一句:我必须在模式中加入“空格”字符才能得到预期的结果。这似乎非常有效。我授予您答案是因为您更正了我的代码。:-)