Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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,我正在尝试为以下表达式获取正则表达式,但无法实现: 字符串有4个用点(.)分隔的单词 第一个单词与给定单词匹配(例如,HELLO) 第二个和第三个单词可以有任何字符,但点本身(.) 最后一个单词再次与给定单词匹配(例如csv) 因此: 您好,有东西。有东西我#gElse.csv应该匹配 有些东西。您好。?.csv不应该匹配 你好,有点…csv不匹配 HELLO.something.somethingelse.notcsv不应匹配 我可以使用split(.)来完成,然后检查单个单词,但我正

我正在尝试为以下表达式获取正则表达式,但无法实现:

  • 字符串有4个用点(.)分隔的单词
  • 第一个单词与给定单词匹配(例如,HELLO)
  • 第二个和第三个单词可以有任何字符,但点本身(.)
  • 最后一个单词再次与给定单词匹配(例如csv)
因此:

  • 您好,有东西。有东西我#gElse.csv应该匹配
  • 有些东西。您好。?.csv不应该匹配
  • 你好,有点…csv不匹配
  • HELLO.something.somethingelse.notcsv不应匹配
我可以使用split(.)来完成,然后检查单个单词,但我正在尝试使用Regex和Pattern类


如果您能提供任何帮助,我们将不胜感激。

这相对简单,只要您了解角色类。方括号为
[xyz]
的正则表达式匹配列表中的任何字符
{x,y,z}
;正则表达式
[^xyz]
匹配除
{x,y,z}
之外的任何字符

现在可以构造表达式:

^HELLO\.[^.]+\.[^.]+\.csv$
+
表示“前面的一个或多个表达式”<代码>\。表示“点本身”<代码>^表示“字符串的开头”<代码>$表示“字符串的结尾”。这些锚阻止正则表达式匹配

blahblahHELLO.world.world.csvblahblah

编写这样的正则表达式的一个常见目标是捕获一些内容,例如,第一个点和第二个点之间的字符串,以及第二个点和第三个点之间的字符串。使用捕获组将这些字符串的内容带入Java程序:

^HELLO\.([^.]+)\.([^.]+)\.csv$
每对括号定义了一个捕获组,索引自
1
(索引为零的组表示整个表达式的捕获)。一旦从模式中获得匹配对象,就可以在其中查询组,并提取相应的字符串

注意,Java正则表达式中的反斜杠需要加倍

(^HELLO\.[^.]+\.[^.]+\.csv$)

.

如果
你好…csv
是有效匹配项,则从
+
-一个或多个切换到
*
-零个或多个。回答不错。您可能想演示一个正则表达式,其中第一个单词可以是hello或Word或Foo,最后一个单词可以是CSV或XLS或TXTT,也可以用组来从匹配中收集每一个单词。非常感谢您,真的帮助我更好地理解正则表达式:也可以考虑包装您需要匹配的单词。方法中的(
HELLO
csv
)欢迎使用堆栈溢出!请包含一些代码以显示您尝试了什么。