【发布时间】:2016-03-17 21:02:25
【问题描述】:
我需要传递如下字符串:
/test/
一些非法的事情是:
\test\
\test
/test
【问题讨论】:
-
有效的例子是: C:/test/ ./test/ C:/Test/ 它必须以正斜杠结尾,并且只包含正斜杠,根本没有反斜杠...
-
发现问题所在:我必须使用 4 个反斜杠才能工作... ^[^\\\]+$
我需要传递如下字符串:
/test/
一些非法的事情是:
\test\
\test
/test
【问题讨论】:
这样的东西应该匹配你的字符串。
^/.*/$
因此,正则表达式期望字符串以正斜杠开头和结尾,并且可以在两者之间包含任何内容。
【讨论】:
.* 不允许斜线之间出现任何字符。它还允许出现一个或多个/ 字符。此外,模式中的 / 字符可能需要转义(取决于解释正则表达式的语言)。
/te/st/ 吗?鉴于他的例子,我的预感可能不是。但是,是的,这是有根据的猜测。
如果你想在斜线字符之间只允许小写字母字符,试试这个:
^\/[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
编辑:当我回答这个问题时,我承认可能没有注意到问题最初的四个标签中的qregexp 标签。一些正则表达式解析器(例如 Perl 提供的解析器)要求使用 delimiter character 来指定模式的开始和结束。对于此类正则表达式解析器,正斜杠/ 通常用作分隔符。如果是这种情况,则需要转义出现在正则表达式模式中的/。
如果需要转义出现在正则表达式模式中以由qregexp 处理的/,则提出了一个问题。也许不是——我会让qregexp 专家回答这个问题。也就是说,对于 not 需要转义 / 的正则表达式解析器,可以从我上面显示的模式中删除转义字符 \:
^/[a-z]+/$
最后,如果一个特定的正则表达式可能在多个环境中使用,它doesn't hurt 转义一个在其中一个环境中可能被视为特殊的字符。
【讨论】:
/ 字符吗?