Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.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_Delimiter - Fatal编程技术网

Java “如何忽略”--&引用;但不是",-&引用;

Java “如何忽略”--&引用;但不是",-&引用;,java,regex,delimiter,Java,Regex,Delimiter,我在Java中使用usedimiter方法来忽略除-之外的所有非字母。这是因为-用于绑定像“三条腿的”这样的单词。问题是,--在单词前后的文本中多次出现。因此,我想忽略所有出现的--,而不是- 这就是我的正则表达式模式到目前为止的样子:usedimiter([[^a-zA-Z&&[^'-]&&&&\\s]+”); 编辑:解决了!我就是这么做的: useDelimiter([[^a-zA-Z&[^'&&[^-{1}]]]]\\s]+”;-对该正则表达式的任何改进都将不胜感激 双重编辑-我没有解决它

我在Java中使用
usedimiter
方法来忽略除
-
之外的所有非字母。这是因为
-
用于绑定像
“三条腿的”
这样的单词。问题是,
--
在单词前后的文本中多次出现。因此,我想忽略所有出现的
--
,而不是
-

这就是我的正则表达式模式到目前为止的样子:
usedimiter([[^a-zA-Z&&[^'-]&&&&\\s]+”);

编辑:解决了!我就是这么做的:
useDelimiter([[^a-zA-Z&[^'&&[^-{1}]]]]\\s]+”;
-对该正则表达式的任何改进都将不胜感激


双重编辑-我没有解决它。但是JERRY确实查看了他的回答以获得正确的答案

我认为您的正则表达式有点奇怪。本质上不需要交叉点(在修复丢失的
]
之后):

[^a-zA-Z]
[^'-]
的交集与
[^a-zA-Z'-]
的交集相同,并且与
\\s
的交集只给出
\\s

也许你的意思是:

useDelimiter("[^a-zA-Z'-[\\s]]+");
然后,如果我构建在您的正则表达式上,您可以使用替换和非捕获组添加
--

useDelimiter("(?:[^a-zA-Z'-[\\s]]|--)+");
示例字符串:

Hello! World! Seems that... -- Hey! That's my three-legged table!
将拆分为:

Hello
World
Seems
that
Hey
That's
my
three-legged
table

编辑:对当前正则表达式的修改可能是:

(?:[[^a-zA-Z&&[^'&&[^-]]]\\s]|--)+

我不是Java专家,但是你的正则表达式没有问题吗

 [  <-- Unbalanced  '['
 [^a-zA-Z&&[^'-]&&\s]+ 

[我不确定你想用正则表达式做什么。你能给我们展示一些输入和预期输出吗?还包括你如何使用扫描仪。您好,我解决了它,但这是预期的输入和输出:输入:“一匹三条腿的马——这就是我想要的”打印出所有单词:一匹三条腿的马,这就是我想要的。所以“三条腿”的马被算作一个单词,因为“-”不被忽略,而“-”被忽略也不被计算。所以我用
-{1}来理解它
,量词可以在Java类中使用,相互测试。我仍然不理解多重交叉。@SingSandibar用一个更简单的正则表达式更新了我的答案。实际上,正如你在这里看到的,这是有效的:(但它无论如何都不做作者希望它做的事情)@Lindrian-正则表达式在非Java引擎中有效,它解析为
/[[^a-zA-Z&[^a-zA-Z&&[^a-zA-Z&&[^a-zA-Z&-]&+/x
。Java使用递归(即:平衡文本)作为括号和
&&
关键字。换句话说,
[^a-zA-Z&&[^a-zA-Z&-]
是非Java中唯一的类。其中非Java的含义是
[\[\[\[\[\\[\\\[\\\\\+]
Hi.谢谢你的评论。我试图改进我的正则表达式,这是我上一次编辑的新编辑:useDelimiter(“[^a-zA-Z'&&&-{1}]\\s]+”;这是好的,还是可以再减少一些?@SingSandibar我不确定,因为它似乎没有为我忽略
--
。我删除了
{1}
在正则表达式中,它的工作原理是一样的。也许试试最后一个正则表达式?我从来没有听说过Java类中的量词上下文。我想知道这是真的,和/或只是在子类的开头,和/或这是否可能是一个功能,或者它只是做了
[-\{\1\}]
@sln我感觉它相当于字面字符
{1}
,因为删除它们似乎不会对函数的行为造成任何改变。非常感谢Jerry!你的正则表达式工作了!我只想知道为什么你必须在or(|)后面加上--.有什么原因吗?我只是问因为我对regexes很新。。。
 [  <-- Unbalanced  '['
 [^a-zA-Z&&[^'-]&&\s]+