任何符号的Java正则表达式?

发布于 2024-10-06 00:55:39 字数 119 浏览 1 评论 0原文

是否有接受任何符号的正则表达式?

编辑:为了澄清我正在寻找的内容..我想构建一个正则表达式,它将接受任意数量的空格,并且它必须包含至少 1 个符号(例如,." ' $ £ 等)或(不排除或)至少 1 个字符。

Is there a regex which accepts any symbol?

EDIT: To clarify what I'm looking for.. I want to build a regex which will accept ANY number of whitespaces and the it must contain atleast 1 symbol (e.g , . " ' $ £ etc.) or (not exclusive or) at least 1 character.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

还不是爱你 2024-10-13 00:55:39

是的。点 (.) 将匹配任何符号,至少如果您将其与 Pattern.DOTALL 标志(否则它不会匹配换行符)。来自文档:

在 dotall 模式下,表达式 .匹配任何字符,包括行终止符。默认情况下,此表达式不匹配行终止符。


关于您的编辑:

我想构建一个正则表达式,它将接受任意数量的空格,并且它必须包含至少 1 个符号(例如 . " ' $ £ 等)或(不排除或)至少 1 个字符。< /strong>


这里有一个建议:

\s*\S+
  • \s* 任意数量的空白字符
  • \S+ 一个或多个(“至少一个”)非空白字符。

Yes. The dot (.) will match any symbol, at least if you use it in conjunction with Pattern.DOTALL flag (otherwise it won't match new-line characters). From the docs:

In dotall mode, the expression . matches any character, including a line terminator. By default this expression does not match line terminators.


Regarding your edit:

I want to build a regex which will accept ANY number of whitespaces and the it must contain atleast 1 symbol (e.g , . " ' $ £ etc.) or (not exclusive or) at least 1 character.

Here is a suggestion:

\s*\S+
  • \s* any number of whitespace characters
  • \S+ one or more ("at least one") non-whitespace character.
缺⑴份安定 2024-10-13 00:55:39

在Java中,符号是\pS,它与标点符号\pP不同。

我谈论这个问题,并枚举所有 ASCII 标点符号的类型,在此答案中

[\p{Alnum}\s] 这样的模式仅适用于 20 世纪 60 年代的遗留数据集。要使用 Java 本机字符集进行工作,您需要一些类似的东西,

identifier_charclass = "[\\pL\\pM\\p{Nd}\\p{Nl}\\p{Pc}[\\p{InEnclosedAlphanumerics}&&\\p{So}]]";
whitespace_charclass = "[\\u000A\\u000B\\u000C\\u000D\\u0020\\u0085\\u00A0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]";

ident_or_white = "[" + identifier_charclass + whitespace_charclass + "]";

我很抱歉 Java 使得使用现代数据集变得如此困难,但至少这是可能的。

只是不要询问边界或字素簇。为此,请参阅我的其他帖子< /a>.

In Java, a symbol is \pS, which is not the same as punctuation characters, which are \pP.

I talk about this issue, plus enumerate the types for all the ASCII punctuation and symbols, here in this answer.

Patterns like [\p{Alnum}\s] only work on legacy dataset from the 1960s. To work on things with the Java native characters set, you needs something on the order of

identifier_charclass = "[\\pL\\pM\\p{Nd}\\p{Nl}\\p{Pc}[\\p{InEnclosedAlphanumerics}&&\\p{So}]]";
whitespace_charclass = "[\\u000A\\u000B\\u000C\\u000D\\u0020\\u0085\\u00A0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]";

ident_or_white = "[" + identifier_charclass + whitespace_charclass + "]";

I’m sorry that Java makes it so difficult to work with modern dataset, but at least it is possible.

Just don’t ask about boundaries or grapheme clusters. For that, see my others posting.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文