【问题标题】:RegEX: need to block all backslashes and leave a forwardslash at the endRegEX:需要阻止所有反斜杠并在末尾留下一个正斜杠
【发布时间】:2016-03-17 21:02:25
【问题描述】:

我需要传递如下字符串:

/test/

一些非法的事情是:

\test\
\test
/test

【问题讨论】:

  • 有效的例子是: C:/test/ ./test/ C:/Test/ 它必须以正斜杠结尾,并且只包含正斜杠,根本没有反斜杠...
  • 发现问题所在:我必须使用 4 个反斜杠才能工作... ^[^\\\]+$

标签: regex qregexp


【解决方案1】:

这样的东西应该匹配你的字符串。

^/.*/$

因此,正则表达式期望字符串以正斜杠开头和结尾,并且可以在两者之间包含任何内容。

【讨论】:

  • 请注意,.* 不允许斜线之间出现任何字符。它还允许出现一个或多个/ 字符。此外,模式中的 / 字符可能需要转义(取决于解释正则表达式的语言)。
  • @DavidRR 他没有说什么字符串是有效的。我同意转义 / (他也没有说他在哪种情况下使用它们,但你是对的)。
  • 您认为应该允许/te/st/ 吗?鉴于他的例子,我的预感可能不是。但是,是的,这是有根据的猜测。
  • @DavidRR 我真的不知道,这就是为什么我认为任何事情都是有效的。也许他想在斜线之间有网址,我不知道......这就是为什么我给出了与他所要求的相匹配的最小表达。然后,他可以根据需要替换 .*。
【解决方案2】:

如果你想在斜线字符之间只允许小写字母字符,试试这个:

^\/[a-z]+\/$

说明:

^      require match to start at the very beginning of the string
\      escape the forward slash in the input string
[a-z]  the character class representing the set of lower case characters
+      the preceding character or character class occurs one or more times
$      require match to end at the very end of the string

编辑:当我回答这个问题时,我承认可能没有注意到问题最初的四个标签中的 标签。一些正则表达式解析器(例如 Perl 提供的解析器)要求使用 delimiter character 来指定模式的开始和结束。对于此类正则表达式解析器,正斜杠/ 通常用作分隔符。如果是这种情况,则需要转义出现在正则表达式模式中的/

如果需要转义出现在正则表达式模式中以由qregexp 处理的/,则提出了一个问题。也许不是——我会让qregexp 专家回答这个问题。也就是说,对于 not 需要转义 / 的正则表达式解析器,可以从我上面显示的模式中删除转义字符 \

^/[a-z]+/$

最后,如果一个特定的正则表达式可能在多个环境中使用,它doesn't hurt 转义一个在其中一个环境中可能被视为特殊的字符。

【讨论】:

  • 你真的需要在 QRegExp 中转义 / 字符吗?
  • @AlexisWilke:感谢您的反馈。请查看我的编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-30
  • 1970-01-01
  • 1970-01-01
  • 2021-05-29
  • 2021-09-13
  • 2017-06-15
  • 2014-09-12
相关资源
最近更新 更多