首页 > 解决方案 > Java Regex - 验证字符串是否包含由句点 (.) 分隔的非空修剪标记

问题描述

我正在尝试编写一个正则表达式,用于识别字符串是否包含由 分隔的非空标记(修剪后).,即以下形式。这是我想出的最好的。

Pattern.compile("^(?!\\.)(?!.*\\.$)(?!.*?\\.\\.)(?!\\p{Space}$)(?!\\p{Space}\\.)(?!.*\\.\\p{Space}$)[\\p{Graph}\\p{Space}]+$", Pattern.UNICODE_CHARACTER_CLASS);

单元测试存在于以下代码中: https ://ideone.com/kuej3D

这适用于所有情况。然而,我觉得有更好的方法来做同样的事情。

例如,

如何检查表格的格式,

<s1><.s2>*

s1是修剪前导和尾随空格后的非空字符串。

.是字面时间

s2是修剪前导和训练空间后的非空字符串。

*表示出现的次数可以最小为 0,最大为无限。

前任:

alpha$#@.ksj`\\c.lijd*3260_+是一个有效的字符串

a b. c d. e f是一个有效的字符串

alpha.是无效字符串

.beta是无效字符串

空字符串是无效字符串

是无效字符串

x..y..z是无效字符串

上面 ideone 代码中的所有测试用例都应该打印true.

标签: javaregex

解决方案


试试这个正则表达式:

"\\s*[^.\\s]+\\s*(\\.\\s*[^.\\s]+\\s*)*"

对于修剪,它匹配开头、每个点之前和之后以及结尾的可选空格。不修剪可能更容易阅读:

"[^.\\s]+(\\.[^.\\s]+)*"

此模式匹配不是点也不是空格的东西,可选地多次跟随.不是点而不是空格的东西。


推荐阅读