有没有一种方法可以从另一个字符类中减去字符或字符范围?
我需要在字符串中查找子字符串,该子字符串应仅包含字符,但不包括“<”和“>”。
[[:print:]] - ('<' | '>')
由于"<"和">"是分隔符,不应该出现在字符串本身中。
<abc> // valid
<ab<c> // invalid
<ab\tc> //invalid
[:print:]
相当于[\x20-\x7E]
,所以如果您不想匹配<
(\x3C
)和>
(\x3E
),可以使用[\x20-\x3B\x3D\x3F-\x7E]
这将匹配字符串中可打印的字符,除了<
和>
之外。
/[\x20-\x3B\x3D\x3F-\x7E]+/
a-z without x
的方法吗? - KingCrunch[ -;=?-~]
。 - Toto[a[b]]
是联合。
[a&&b]
是交集。
[a&&[^b]]
是减法。
我经常在Java中进行相当复杂的集合操作。例如,这就是你在Java中必须使用的。
[^\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics}&&\p{So}]]
对于现代版本的\w
。 (您不必在Perl中执行此操作,因为\w
在那里并没有像Java中那样出现问题。)单词边界会变得更加困难:
(?:(?<=[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics}&&\p{So}]])(?![\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics}&&\p{So}]])|(?<![\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics}&&\p{So}]])(?=[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics}&&\p{So}]]))
\b
,而不是一个会破坏你所有操作的错误东西。要在没有\X
的语言中实现它,可以使用一个被定义为遗留字形簇的东西。(?>\PM\pM*)
或者你可以使用扩展字形簇,定义为(实际上几乎是这样):
(?:(?:\u000D\u000A)|(?:[\u0E40\u0E41\u0E42\u0E43\u0E44\u0EC0\u0EC1\u0EC2\u0EC3\u0EC4\uAAB5\uAAB6\uAAB9\uAABB\uAABC]*(?:[\u1100-\u115F\uA960-\uA97C]+|([\u1100-\u115F\uA960-\uA97C]*((?:[[\u1160-\u11A2\uD7B0-\uD7C6][\uAC00\uAC1C\uAC38]][\u1160-\u11A2\uD7B0-\uD7C6]*|[\uAC01\uAC02\uAC03\uAC04])[\u11A8-\u11F9\uD7CB-\uD7FB]*))|[\u11A8-\u11F9\uD7CB-\uD7FB]+|[^[\p{Zl}\p{Zp}\p{Cc}\p{Cf}&&[^\u000D\u000A\u200C\u200D]]\u000D\u000A])[[\p{Mn}\p{Me}\u200C\u200D\u0488\u0489\u20DD\u20DE\u20DF\u20E0\u20E2\u20E3\u20E4\uA670\uA671\uA672\uFF9E\uFF9F][\p{Mc}\u0E30\u0E32\u0E33\u0E45\u0EB0\u0EB2\u0EB3]]*)|(?s:.))
<
和>
字符,还是你想要移除任何看起来像<example>
的字符串? - eykanal