Java URL中有效图像的正则表达式
首先,我知道stackoverflow中有很多正则表达式线程,我检查了很多,但是很难匹配正确的句子 我目前正在尝试匹配以下字符: -a-z -A-Z - 0-9 -.()~-\[] 在这个正则表达式中,后面要做的是用空格替换所有不匹配的字符 我正在使用的文件名示例如下: -12345677-FIEBERTHOMETER-fuer-schlaefe-und-ohr-digital-mapa-nuk-d0@#$%”和*()!ßöäÄÜÖ“'][}{:;,º.jpg 正如您在代码中看到的,字符的替换是以regex的否定表示valid,但我也不确定这是否应该是这样,因为所有匹配都是false 第一个问题:即使文件名正确,匹配也总是错误的,这会导致创建一个新文件并更改上次修改日期,保持不变很重要 第二个问题:逗号和星号始终保留在文件名中,但这也可能是由于错误的正则表达式造成的 有效名称的示例: -12345677-FIEBERTHERMETER-fuer-schlaefe-und-ohr-digital-mapa-nuk-d0_~()][.jpgJava URL中有效图像的正则表达式,java,regex,regex-negation,Java,Regex,Regex Negation,首先,我知道stackoverflow中有很多正则表达式线程,我检查了很多,但是很难匹配正确的句子 我目前正在尝试匹配以下字符: -a-z -A-Z - 0-9 -.()~-\[] 在这个正则表达式中,后面要做的是用空格替换所有不匹配的字符 我正在使用的文件名示例如下: -12345677-FIEBERTHOMETER-fuer-schlaefe-und-ohr-digital-mapa-nuk-d0@#$%”和*()!ßöäÄÜÖ“'][}{:;,º.jpg 正如您在代码中看到的,字符的替换是
我在这里遗漏了什么我找不到的?我用notepad++复制了它,但我会尝试用java来做 没有什么问题。您应该匹配有问题的字符,如果找到了这些字符,则替换它们。使用find()而不是matches,因为您不需要匹配整个字符串 在记事本中,我只需将[^a-zA-Z0-9.[]\-~+]替换为“”,我就得到了您想要的 在爪哇
import java.util.regex.*;
public class HelloWorld{
public static void main(String[] args) {
String wrong="12345677-fieberthermometer-fuer-schlaefe-und-ohr-digital-mapa-nuk-d0@#$%\"&*()!ßöäüÄÜÖ\"'][}{<>:;,º.jpg";
String pattern="[^a-zA-Z0-9\\.\\(\\)\\[\\]\\-~_]+";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(wrong);
if (m.find()){
right = wrong.replaceAll(pattern, "");
System.out.println(right);
}
}
}
import java.util.regex.*;
公共类HelloWorld{
公共静态void main(字符串[]args){
字符串错误=“12345677-Fieberthermeter-fuer-schlaefe-und-ohr-digital-mapa-nuk-d0@$%\”和*()!ßöääÄÜÖ\'][}{:,º.jpg”;
字符串模式=“[^a-zA-Z0-9\\.\\(\\)\[\\]\-~+”;
Pattern p=Pattern.compile(Pattern);
匹配器m=p.Matcher(错误);
if(m.find()){
正确=错误。replaceAll(模式“”);
System.out.println(右);
}
}
}
我用记事本++复制了它,但我会尝试用java
没有什么问题。您应该匹配有问题的字符,如果找到了这些字符,则替换它们。使用find()而不是matches,因为您不需要匹配整个字符串
在记事本中,我只需将[^a-zA-Z0-9.[]\-~+]替换为“”,我就得到了您想要的
在爪哇
import java.util.regex.*;
public class HelloWorld{
public static void main(String[] args) {
String wrong="12345677-fieberthermometer-fuer-schlaefe-und-ohr-digital-mapa-nuk-d0@#$%\"&*()!ßöäüÄÜÖ\"'][}{<>:;,º.jpg";
String pattern="[^a-zA-Z0-9\\.\\(\\)\\[\\]\\-~_]+";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(wrong);
if (m.find()){
right = wrong.replaceAll(pattern, "");
System.out.println(right);
}
}
}
import java.util.regex.*;
公共类HelloWorld{
公共静态void main(字符串[]args){
字符串错误=“12345677-Fieberthermeter-fuer-schlaefe-und-ohr-digital-mapa-nuk-d0@$%\”和*()!ßöääÄÜÖ\'][}{:,º.jpg”;
字符串模式=“[^a-zA-Z0-9\\.\\(\\)\[\\]\-~+”;
Pattern p=Pattern.compile(Pattern);
匹配器m=p.Matcher(错误);
if(m.find()){
正确=错误。replaceAll(模式“”);
System.out.println(右);
}
}
}
我想你错过了+
:模式p=Pattern.compile(“[”+URL\u VALID\u REGEX++”);
m.matches()
需要一个完整的字符串匹配。事实上,这是缺少的,现在我可以看到加号后的值是真的。正则表达式让我抓狂,因为一个字符可以改变整个结果哈哈。谢谢你的提示!再想一想,*
Modifier在这种情况下更好。好吧,无论如何,检查一下什么最适合你,+
或*
使用+和*,有什么区别?如果我记录好,+至少需要1个字符串,而*可以是无字符串,对吗?当您使用+
时,空字符串将使用replaceAll
进行处理。如果您之前有空字符串检查,这可能不是问题。我想您错过了ed++
:模式p=Pattern.compile(“[”+URL\u VALID\u REGEX++)”;
m.matches()
需要一个完整的字符串匹配。事实上,这是缺少的,现在我可以看到加号后的值是真的。正则表达式让我抓狂,因为一个字符可以改变整个结果哈哈。谢谢你的提示!再想一想,*
Modifier在这种情况下更好。好吧,无论如何,检查一下什么最适合你,+
或*
。使用+和*,有什么区别?如果我记录好,+至少需要1个字符串,而*可以是无字符串,对吗?当您使用+
时,空字符串将使用replaceAll
处理。如果您之前检查过空字符串,这可能不是问题。答案是否定的t相关。每个文件都与此匹配,因为每个文件都至少有一个匹配字符。-错误,[a-z]
与匹配
仅与只有1个字符的字符串匹配。因此,您应该与有问题的字符匹配,如果发现有问题的字符,请将其替换为-OP,请参阅name=name.replaceAll(“[^”+URL\u VALID\u REGEX+“]”,“”);
。您需要转义“-”-OP模式包含一个转义的-
。很抱歉,可能我解释错了。我现在修复了答案,并添加了一个运行中的java示例。您刚刚重新发明了OP代码。该步骤已经在OP代码中运行。在与replaceAll
一起使用的模式中,您不需要+
,尽管它更符合逻辑。但不是必需的不需要,因为它将替换找到的每个字符,但会使正则表达式更具可读性和可靠性(但不确定)它将有更好的性能-至少在我的头脑中可能我正在重新发明,但我的工作;)和OP不相关…答案是不相关的。每个文件都与此匹配,因为每个文件至少有一个匹配字符。-错误,[a-z]
withmatches
只匹配一个只有1个字符的字符串。因此,您应该匹配有问题的字符,如果发现有问题的字符,请将其替换为-OP,请参见