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

正则表达式中的转义路径分隔符

戈华茂
2023-03-14

我需要编写一个正则表达式来查找匹配的javascript文件

<anypath><slash>js<slash><anything>.js

例如,它应该对两者都有效:

  • c:\mysite\js\common.js(Windows)
  • /var/www/mysite/js/common.js(UNIX)

问题是Windows中的文件分隔符没有正确转义:

pattern = Pattern.compile(
     "^(.+?)" + 
     File.separator +
     "js" +
     File.separator +
     "(.+?).js$" );

投掷

java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence

有没有办法使用在Windows和UNIX系统中都能工作的通用正则表达式?

共有3个答案

巢烨
2023-03-14

你就不能用反斜杠来避开路径分隔符吗

pattern = Pattern.compile(
     "^(.+?)\\" + 
     File.separator +
     "js\\" +
     File.separator +
     "(.+?).js$" );
方心思
2023-03-14

有没有办法使用在Windows和UNIX系统中都能工作的通用正则表达式?

是的,只需使用一个匹配两种分隔符的正则表达式。

pattern = Pattern.compile(
    "^(.+?)" + 
    "[/\\\\]" +
    "js" +
    "[/\\\\]" +
    "(.+?)\\.js$" );

这是安全的,因为Windows和Unix都不允许在文件或目录名中使用这些字符。

东方宜
2023-03-14

模式。quote(File.separator)怎么做?

编辑:这在Java 1.5或更高版本中可用。对于1.4,只需转义文件分隔符字符:

"\\" + File.separator

转义标点符号不会破坏任何东西,但无条件转义字母或数字将改变它们的特殊含义或导致模式语法异常。(感谢Alan M在评论中指出这一点!)

 类似资料:
  • 昨天,我需要向正则表达式添加一个文件路径,创建一个如下所示的模式: 一开始正则表达式不匹配,因为包含几个正则表达式特定的符号,如 或 。作为快速修复,我将它们替换为 和 . 与 . 然而,我问自己,是否没有一种更可靠或更好的方法来清除正则表达式特定符号中的字符串。 Python 标准库中是否支持此类功能? 如果没有,您是否知道一个正则表达式来识别所有正则表达式并通过替代品清理它们?

  • 我正在搜索正则表达式-"。(冲突的副本。"。我为此写了以下代码 但我有个例外 异常在线程"main"中java.util.regex.Pattern Syn的异常:索引15附近的未关闭组。( 我知道编译器认为是模式组的开始。我试图通过添加来逃避),但这不起作用。 有人能告诉我怎么逃走吗?

  • 转义字符串以在正则表达式中使用。 使用 String.replace() 来转义特殊字符。 const escapeRegExp = str => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); escapeRegExp('(test)'); // \\(test\\)

  • 我想将一个长数组值转换为一个特定格式的字符串。 例如,将longArray={0,1,2,3}转换为字符串0.1.2.3 我可以执行arrays.ToString(longArray),它将返回[0,1,2,3]。 现在必须将字符串[0,1,2,3]转换为0.1.2.3

  • 问题内容: 当匹配某些字符(例如换行符)时,可以使用正则表达式“ \\ n”或仅使用“ \ n”。例如,以下将字符串拆分为行数组: 但是以下内容同样适用: 我的问题: 上面两个是 完全 一样地工作,还是有细微的差别?如果是后者,能否举个例子,说明您得到不同的结果? 还是仅在[可能/理论]表现上有所不同? 问题答案: 在当前情况下没有区别。通常的字符串转义序列是在单个反斜杠的帮助下形成的,然后有效的

  • 使用JavaScript,我试图使用正则表达式将段落拆分为句子。我的正则表达式不考虑括号内的句子,我希望保留分隔符。 我在这里放了一个代码示例 jsFiddle.net