Kon*_*lph 158
连字符通常是正则表达式中的正常字符.只有当它在一个字符类中并且在两个其他字符之间时它才具有特殊意义.
从而:
[-] 匹配连字符.[abc-]比赛a,b,c或连字符.[-abc]比赛a,b,c或连字符.[ab-d]匹配a,b,c或d(这里只连字符表示一个字符范围).Nei*_*ell 64
逃脱连字符.
[a-zA-Z0-9!$* \t\r\n\-]
Run Code Online (Sandbox Code Playgroud)
更新:
没关系这个答案 - 您可以将连字符添加到组中,但您不必逃避它.请参阅Konrad Rudolph的答案,它可以更好地回答并解释原因.
tch*_*ist 12
总是使用转义连字符不那么令人困惑,因此它不必依赖于位置.这是一个\-括号内的角色类.
但还有其他需要考虑的事情.其中一些枚举字符应该以不同的方式编写.在某些情况下,他们肯定应该.
这种正则表达式的比较说C♯可以使用一些更简单的Unicode属性.如果您正在处理Unicode,则应该使用\p{L}所有可能字母的常规类别,也可以 \p{Nd}使用十进制数字.此外,如果你想要容纳所有短划线标点符号,而不仅仅是HYPHEN-MINUS,你应该使用该\p{Pd}属性.你可能也想把这个空格字符序列简单地写成\s,假设对你来说不太通用.
总之,这可以解决[\p{L}\p{Nd}\p{Pd}!$*]与该集合中的任何一个角色相匹配的问题.
无论如何,即使我没有计划处理完整的Unicode集,我也可能会使用它,因为这是一个很好的习惯,因为这些东西经常超出原始参数.现在当你解除它以在其他代码中使用时,它仍然可以正常工作.如果您对所有字符进行硬编码,则不会.
小智 5
[-a-z0-9]+,[a-z0-9-]+,[az-0-9]+ 和 [az-0-9]+ 都是一样的。两个范围之间的连字符被认为是符号。还有 [a-z0-9-+()]+ 这个正则表达式允许连字符。
| 归档时间: |
|
| 查看次数: |
108319 次 |
| 最近记录: |