Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式需要一个字母表和一个非字母表,并且没有空格_Java_Regex - Fatal编程技术网

Java 正则表达式需要一个字母表和一个非字母表,并且没有空格

Java 正则表达式需要一个字母表和一个非字母表,并且没有空格,java,regex,Java,Regex,我想在Java中创建一个正则表达式来匹配至少1个字母表,1个非字母表可以是除a-Za-z之外的任何东西,并且没有空格 下面的正则表达式部分正确: ^([A-Za-z]{1,}[^A-Za-z]{1,})+$ 它与AA7777相匹配 但与777aaaaa不匹配 任何帮助都将不胜感激。您可以使用 s.matches("(?=\\P{Alpha}*\\p{Alpha})(?=\\p{Alpha}*\\P{Alpha})\\S*") 细节 模式将匹配整个字符串,因为^和\z锚点在匹配中是隐式的 ?

我想在Java中创建一个正则表达式来匹配至少1个字母表,1个非字母表可以是除a-Za-z之外的任何东西,并且没有空格

下面的正则表达式部分正确:

^([A-Za-z]{1,}[^A-Za-z]{1,})+$
它与AA7777相匹配 但与777aaaaa不匹配

任何帮助都将不胜感激。

您可以使用

s.matches("(?=\\P{Alpha}*\\p{Alpha})(?=\\p{Alpha}*\\P{Alpha})\\S*")

细节

模式将匹配整个字符串,因为^和\z锚点在匹配中是隐式的

?=\p{Alpha}*\p{Alpha}-在任何0+字符(ASCII字母除外)之后至少需要一个ASCII字母的前瞻

?=\p{Alpha}*\p{Alpha}-在0个或多个ASCII字母之后需要除ASCII字母以外的字符的一种前瞻 \S*-零个或多个非空白字符。
要使正则表达式能够识别Unicode,请将\p{Alpha}替换为\p{L},将\p{Alpha}替换为\p{L}。

您的正则表达式隐式假定要匹配的字符顺序。regex说一封信必须在非后者之前。但是,您希望字母和非字母以任意顺序出现,因此您需要考虑这两种情况。还请注意,它应该是[^\sa-zA-Z],而不是[^a-zA-Z],因为不允许使用空格

(?:[a-zA-Z][^\sa-zA-Z]|[^\sa-zA-Z][a-zA-Z])
在开始和结束处,允许使用任何非空格字符,因此:

^\S*(?:[a-zA-Z][^\sa-zA-Z]|[^\sa-zA-Z][a-zA-Z])\S*$

正则表达式不是这种类型验证的合适工具。只要写出简单的逻辑,你的具体例子:

公共班机{ 公共静态无效字符串[]args{ System.out.println'foo'?+doesMatchfoo; System.out.println'bar7'?+doesMatchbar7; System.out.println'55baz'?+Doesmach55Baz; } 公共静态布尔doesMatchString输入{ 布尔hasAlpha=false, hasNonAlpha=假; forchar ch:input.TOCHARRAY{
ifch>='a'&&ch='a'&&ch?s^?=\\P{Alpha}*\\P{Alpha}?=\\P{Alpha}*\\P{Alpha}.+$对不起,\\P{Alpha}与字母匹配,\P{Alpha}匹配非字母。它不起作用。如果您在使用在线测试仪时遇到问题,我会在Java测试中进行测试。在JS正则表达式测试仪中测试Java正则表达式没有什么意义,因为正则表达式引擎非常不同。我根据问号提供了Java解决方案。@Abhishek我刚刚注意到您想要匹配一个没有空格的字符串。我更新了答案以解释此问题。先前允许字符串中任何字符的变体位于中。