路径的正则表达式不起作用

时间:2014-05-01 11:02:46

标签: regex

我需要为路径创建reg-ex,如aaaa / bbb / ccc或aaa-bbb或aaa_bbb_ccc_ddd等 我该怎么办? 它只能包含带<连字符下划线和斜杠的字母数字。 我尝试过这样的东西不能正常工作

@"^((?:/[a-zA-Z0-9]+)+/?|/?(?:[a-zA-Z0-9]+/)+)[a-zA-Z0-9]*$"

2 个答案:

答案 0 :(得分:1)

如果你不介意你的路径是否有aaa-bbb/ccc这样的混合分隔符,那么你可以通过以下方式轻松完成:

"^(?:[A-z0-9]+[-_\/]?)*$"

这将接受aaa-bbb/cccaaa/但拒绝aaa--bbb。如果您想确保只有一种类型的分隔符,那么我们可以为每个分隔符类型创建一个重复的块:

"^(?:(?:[A-z0-9]+-?)*|(?:[A-z0-9]+_?)*|(?:[A-z0-9]+\/?)*)$"

这仍然会容忍尾随分隔符,你可以通过在末尾添加另一个组来摆脱它:

"^(?:(?:[A-z0-9]+-?)*|(?:[A-z0-9]+_?)*|(?:[A-z0-9]+\/?)*)[A-z0-9]+$"

如果您想要允许前导分隔符,只需在组前移动它们即可。另请注意额外的\s*以允许尾随空格。

"^(?:(?:-?[A-z0-9]+)*|(?:_?[A-z0-9]+)*|(?:\/?[A-z0-9]+?)*)\s*$"

眼睛不容易,但它确实有效(至少在perl中)。

答案 1 :(得分:1)

尝试这个匹配单词

\b[a-zA-Z0-9]*[-/_]+[a-zA-Z0-9]+\b

enter image description here


注意:

  • \w还包含下划线,说明我使用[a-zA-Z0-9]
  • 的原因 如果您不想匹配字边界,
  • 从任意一端删除\b

模式阐述:

\w     A word character: [a-zA-Z_0-9]
\b     A word boundary
[abc]  a, b, or c (simple class)