使用Java正则表达式如何仅返回精确匹配?

使用Java正则表达式如何仅返回精确匹配?,java,regex,Java,Regex,我有一个字符串,其中包含大量的文本,我想在其中搜索模式匹配。对于我找到的每个匹配项,我希望从输入字符串中提取它,并将其存储在列表或字符串[]中以进行进一步排序 为此,我尝试使用Java正则表达式搜索我想要的模式,然后将这些匹配打印到我的控制台。但我显然没有对我的正则表达式做正确的处理,因为不仅我的匹配项被返回,而且从输入字符串的开头到正则表达式的最终匹配项的所有内容都被返回 我拼命地想找到一种方法,只返回我的正则表达式匹配,没有任何其他!谁能提供一个可行的解决方案?我会非常感激的,因为我现在被难

我有一个字符串,其中包含大量的文本,我想在其中搜索模式匹配。对于我找到的每个匹配项,我希望从输入字符串中提取它,并将其存储在列表或字符串[]中以进行进一步排序

为此,我尝试使用Java正则表达式搜索我想要的模式,然后将这些匹配打印到我的控制台。但我显然没有对我的正则表达式做正确的处理,因为不仅我的匹配项被返回,而且从输入字符串的开头到正则表达式的最终匹配项的所有内容都被返回

我拼命地想找到一种方法,只返回我的正则表达式匹配,没有任何其他!谁能提供一个可行的解决方案?我会非常感激的,因为我现在被难住了

要快速了解我在做什么,请参阅以下已保存的正则表达式:

否则,下面是我的代码和我试图排序的整个输入字符串,这是我正在处理的数据的一个很好的示例:

final String regex = "(name=\"(.*?) 30 Minute Wait,)";
    final String input1 = "name=\"Barnstormer, Fantasyland, 05 Minute Wait,name=\"Big Thunder Mountain Railroad, Frontierland, 05 Minute Wait,name=\"Celebrity Spotlight, Echo Lake, 05 Minute Wait,name=\"DINOSAUR, DinoLand U.S.A., 05 Minute Wait,name=\"Expedition Everest - Legend of the Forbidden Mountain, Asia, 05 Minute Wait,name=\"Gran Fiesta Tour StarringThree Caballeros, World Showcase, 05 Minute Wait,name=\"Great Movie Ride, Hollywood Boulevard, 05 Minute Wait,name=\"Mad Tea Party, Fantasyland, 05 Minute Wait,name=\"Meet Chewbacca at Star Wars Launch Bay, Animation Courtyard, 05 Minute Wait,name=\"Seas with Nemo & Friends, Future World, 05 Minute Wait,name=\"Star Wars Launch Bay Theater, Animation Courtyard, 05 Minute Wait,name=\"TriceraTop Spin, DinoLand U.S.A., 05 Minute Wait,name=\"Buzz Lightyear's Space Ranger Spin, Tomorrowland, 10 Minute Wait,name=\"Dumbo the Flying Elephant, Fantasyland, 10 Minute Wait,name=\"Encounter Kylo Ren at Star Wars Launch Bay, Animation Courtyard, 10 Minute Wait,name=\"it's a small world, Fantasyland, 10 Minute Wait,name=\"Kilimanjaro Safaris, Africa, 10 Minute Wait,name=\"Magic Carpets of Aladdin, Adventureland, 10 Minute Wait,name=\"Many Adventures of Winnie the Pooh, Fantasyland, 10 Minute Wait,name=\"Mickey and Minnie Starring in Red Carpet Dreams, Commissary Lane, 10 Minute Wait,name=\"Mickey's PhilharMagic, Fantasyland, 10 Minute Wait,name=\"Muppet*Vision 3D, Muppet Courtyard, 10 Minute Wait,name=\"Pirates of the Caribbean, Adventureland, 10 Minute Wait,name=\"Primeval Whirl, DinoLand U.S.A., 10 Minute Wait,name=\"Soarin', Future World, 10 Minute Wait,name=\"Spaceship Earth, Future World, 10 Minute Wait,name=\"Star Tours –Adventures Continue, Echo Lake, 10 Minute Wait,name=\"Toy Story Mania!, Pixar Place, 10 Minute Wait,name=\"Twilight Zone Tower of Terror™, Sunset Boulevard, 10 Minute Wait,name=\"Under the Sea ~ Journey ofLittle Mermaid, Fantasyland, 10 Minute Wait,name=\"Jungle Cruise, Adventureland, 15 Minute Wait,name=\"Mission: SPACE, Future World, 15 Minute Wait,name=\"Rock 'n' Roller Coaster Starring Aerosmith, Sunset Boulevard, 15 Minute Wait,name=\"Splash Mountain, Frontierland, 15 Minute Wait,name=\"Astro Orbiter, Tomorrowland, 20 Minute Wait,name=\"Meet Disney Pals at the Epcot Character Spot, Future World, 20 Minute Wait,name=\"Monsters, Inc. Laugh Floor, Tomorrowland, 20 Minute Wait,name=\"Meet Rapunzel and Tiana at Princess Fairytale Hall, Fantasyland, 25 Minute Wait,name=\"Space Mountain, Tomorrowland, 25 Minute Wait,name=\"Enchanted Tales with Belle, Fantasyland, 30 Minute Wait,name=\"Meet Cinderella and Elena at Princess Fairytale Hall, Fantasyland, 30 Minute Wait,name=\"Meet Tinker Bell at Town Square Theater, Main Street, U.S.A., 30 Minute Wait,name=\"Peter Pan's Flight, Fantasyland, 30 Minute Wait,name=\"Test Track, Future World, 30 Minute Wait,name=\"Meet Anna and Elsa at Royal Sommerhus, World Showcase, 40 Minute Wait,name=\"Tomorrowland Speedway, Tomorrowland, 40 Minute Wait,name=\"Frozen Ever After, World Showcase, 45 Minute Wait,name=\"Meet Mickey Mouse at Town Square Theater, Main Street, U.S.A., 55 Minute Wait,name=\"Meet Ariel at Her Grotto, Fantasyland, 65 Minute Wait,name=\"Seven Dwarfs Mine Train, Fantasyland, 80 Minute Wait,name=\"Haunted Mansion, Liberty Square, Temporarily Closed,name=\"Kali River Rapids, Asia, Temporarily Closed\n";

    final Pattern pattern = Pattern.compile(regex);
    final Matcher matcher = pattern.matcher(input1);

    //Create a List String for storing the Wait Time matches that we find
    List<String> waitTimesSorted = new ArrayList<String>();

    //Create a loop that the matcher uses to search through the input string for our Wait Times
    while (matcher.find()) {
        //Add the matching wait times we find to a List String     
        waitTimesSorted.add(matcher.group());              
    }

    //Print our matches to the console
    System.out.println(waitTimesSorted);
我想要归还的东西是这样的:

name="Enchanted Tales with Belle, Fantasyland, 30 Minute Wait,, name="Meet Cinderella and Elena at Princess Fairytale Hall, Fantasyland, 30 Minute Wait,, name="Meet Tinker Bell at Town Square Theater, Main Street, U.S.A., 30 Minute Wait,, name="Peter Pan's Flight, Fantasyland, 30 Minute Wait,, name="Test Track, Future World, 30 Minute Wait,]
有没有办法只找回我要找的东西


我确实需要等待时间的精确匹配(我这里用30分钟作为一个例子),因为我试图按等待时间(5分钟等待、10分钟等待、15分钟等待等)将等待时间分组,然后对它们进行排序,以确保每个组按字母顺序排列。所以,我不会在我的正则表达式中寻找通用数字,我非常具体地描述了等待时间,实际上我有一系列预期的等待时间来生成我的正则表达式,但这是另一回事,不是问题

正则表达式的问题在于,您将“捕获组”放在整个输入周围,并使用索引调用
group()
返回完整匹配,包括
*
,这意味着等待时间之前的任何内容

如果将正则表达式更改为
“name=\”(.*)(30分钟等待),“
并调用
matcher.group(2)
,它将返回
“30分钟等待”

查看
组(int)
方法的Javadoc:


哦,您可能希望将正则表达式中的
“30”
替换为
“\\d+”
,以便查找任何数字,而不仅仅是30。

您可能希望跳过匹配中不需要的字符,否则它将从字符串的开头向前匹配。请尝试类似于
?(name=\”(.*)的操作等待30分钟,)

您的问题是
*?
也会穿过任何其他
名称=“
”,使其匹配过多

为了防止这种情况发生,简单地排除
=
将防止这种情况发生

此外,您不需要捕获整个匹配的表达式。这是作为捕获组0执行的

因此,regex
name=“([^”]*?)等待30分钟,
就可以了。
作为Java字符串,这将是
“name=\”([^\“]*?)30分钟等待,


请参阅。

多亏了Andreas,以下是获得我正在搜索的任何模式的正确正则表达式,除此之外没有其他内容:

final String regex = "([^\"]*?) 30 Minute Wait,";
final String input1 = "name=\"Barnstormer, Fantasyland, 05 Minute Wait,name=\"Big Thunder Mountain Railroad, Frontierland, 05 Minute Wait,name=\"Celebrity Spotlight, Echo Lake, 05 Minute Wait,name=\"DINOSAUR, DinoLand U.S.A., 05 Minute Wait,name=\"Expedition Everest - Legend of the Forbidden Mountain, Asia, 05 Minute Wait,name=\"Gran Fiesta Tour StarringThree Caballeros, World Showcase, 05 Minute Wait,name=\"Great Movie Ride, Hollywood Boulevard, 05 Minute Wait,name=\"Mad Tea Party, Fantasyland, 05 Minute Wait,name=\"Meet Chewbacca at Star Wars Launch Bay, Animation Courtyard, 05 Minute Wait,name=\"Seas with Nemo & Friends, Future World, 05 Minute Wait,name=\"Star Wars Launch Bay Theater, Animation Courtyard, 05 Minute Wait,name=\"TriceraTop Spin, DinoLand U.S.A., 05 Minute Wait,name=\"Buzz Lightyear's Space Ranger Spin, Tomorrowland, 10 Minute Wait,name=\"Dumbo the Flying Elephant, Fantasyland, 10 Minute Wait,name=\"Encounter Kylo Ren at Star Wars Launch Bay, Animation Courtyard, 10 Minute Wait,name=\"it's a small world, Fantasyland, 10 Minute Wait,name=\"Kilimanjaro Safaris, Africa, 10 Minute Wait,name=\"Magic Carpets of Aladdin, Adventureland, 10 Minute Wait,name=\"Many Adventures of Winnie the Pooh, Fantasyland, 10 Minute Wait,name=\"Mickey and Minnie Starring in Red Carpet Dreams, Commissary Lane, 10 Minute Wait,name=\"Mickey's PhilharMagic, Fantasyland, 10 Minute Wait,name=\"Muppet*Vision 3D, Muppet Courtyard, 10 Minute Wait,name=\"Pirates of the Caribbean, Adventureland, 10 Minute Wait,name=\"Primeval Whirl, DinoLand U.S.A., 10 Minute Wait,name=\"Soarin', Future World, 10 Minute Wait,name=\"Spaceship Earth, Future World, 10 Minute Wait,name=\"Star Tours –Adventures Continue, Echo Lake, 10 Minute Wait,name=\"Toy Story Mania!, Pixar Place, 10 Minute Wait,name=\"Twilight Zone Tower of Terror™, Sunset Boulevard, 10 Minute Wait,name=\"Under the Sea ~ Journey ofLittle Mermaid, Fantasyland, 10 Minute Wait,name=\"Jungle Cruise, Adventureland, 15 Minute Wait,name=\"Mission: SPACE, Future World, 15 Minute Wait,name=\"Rock 'n' Roller Coaster Starring Aerosmith, Sunset Boulevard, 15 Minute Wait,name=\"Splash Mountain, Frontierland, 15 Minute Wait,name=\"Astro Orbiter, Tomorrowland, 20 Minute Wait,name=\"Meet Disney Pals at the Epcot Character Spot, Future World, 20 Minute Wait,name=\"Monsters, Inc. Laugh Floor, Tomorrowland, 20 Minute Wait,name=\"Meet Rapunzel and Tiana at Princess Fairytale Hall, Fantasyland, 25 Minute Wait,name=\"Space Mountain, Tomorrowland, 25 Minute Wait,name=\"Enchanted Tales with Belle, Fantasyland, 30 Minute Wait,name=\"Meet Cinderella and Elena at Princess Fairytale Hall, Fantasyland, 30 Minute Wait,name=\"Meet Tinker Bell at Town Square Theater, Main Street, U.S.A., 30 Minute Wait,name=\"Peter Pan's Flight, Fantasyland, 30 Minute Wait,name=\"Test Track, Future World, 30 Minute Wait,name=\"Meet Anna and Elsa at Royal Sommerhus, World Showcase, 40 Minute Wait,name=\"Tomorrowland Speedway, Tomorrowland, 40 Minute Wait,name=\"Frozen Ever After, World Showcase, 45 Minute Wait,name=\"Meet Mickey Mouse at Town Square Theater, Main Street, U.S.A., 55 Minute Wait,name=\"Meet Ariel at Her Grotto, Fantasyland, 65 Minute Wait,name=\"Seven Dwarfs Mine Train, Fantasyland, 80 Minute Wait,name=\"Haunted Mansion, Liberty Square, Temporarily Closed,name=\"Kali River Rapids, Asia, Temporarily Closed\n";

        final Pattern pattern = Pattern.compile(regex);
        final Matcher matcher = pattern.matcher(input1);

        //Create a List String for storing the Wait Time matches that we find
        List<String> waitTimesSorted = new ArrayList<String>();

        //Create a loop that the matcher uses to search through the input string for our Wait Times
        while (matcher.find()) {
            //Add the matching wait times we find to a List String     
            waitTimesSorted.add(matcher.group());              
        }

        //Print our matches to the console
        System.out.println(waitTimesSorted);
再次感谢大家

灵感来自安德烈亚斯

我有较短版本的有效regexp
name=[^=]*30分钟等待,


请参见

不错的答案,但这里不需要分组,只需name=“[^”]*?30分钟后,@Mikedamenko你说得对,但我想OP是出于某种原因想捕捉到的,所以我把它留在了里面。Andreas!兄弟!哇,真是妙计!天哪,谢谢你!几个星期来,我一直在努力把事情做好!哇!你不知道这对我有多大帮助!我非常感谢你花时间回复我!非常感谢你!!感谢所有回应的人!我非常感谢你们所有人!谢谢
final String regex = "([^\"]*?) 30 Minute Wait,";
final String input1 = "name=\"Barnstormer, Fantasyland, 05 Minute Wait,name=\"Big Thunder Mountain Railroad, Frontierland, 05 Minute Wait,name=\"Celebrity Spotlight, Echo Lake, 05 Minute Wait,name=\"DINOSAUR, DinoLand U.S.A., 05 Minute Wait,name=\"Expedition Everest - Legend of the Forbidden Mountain, Asia, 05 Minute Wait,name=\"Gran Fiesta Tour StarringThree Caballeros, World Showcase, 05 Minute Wait,name=\"Great Movie Ride, Hollywood Boulevard, 05 Minute Wait,name=\"Mad Tea Party, Fantasyland, 05 Minute Wait,name=\"Meet Chewbacca at Star Wars Launch Bay, Animation Courtyard, 05 Minute Wait,name=\"Seas with Nemo & Friends, Future World, 05 Minute Wait,name=\"Star Wars Launch Bay Theater, Animation Courtyard, 05 Minute Wait,name=\"TriceraTop Spin, DinoLand U.S.A., 05 Minute Wait,name=\"Buzz Lightyear's Space Ranger Spin, Tomorrowland, 10 Minute Wait,name=\"Dumbo the Flying Elephant, Fantasyland, 10 Minute Wait,name=\"Encounter Kylo Ren at Star Wars Launch Bay, Animation Courtyard, 10 Minute Wait,name=\"it's a small world, Fantasyland, 10 Minute Wait,name=\"Kilimanjaro Safaris, Africa, 10 Minute Wait,name=\"Magic Carpets of Aladdin, Adventureland, 10 Minute Wait,name=\"Many Adventures of Winnie the Pooh, Fantasyland, 10 Minute Wait,name=\"Mickey and Minnie Starring in Red Carpet Dreams, Commissary Lane, 10 Minute Wait,name=\"Mickey's PhilharMagic, Fantasyland, 10 Minute Wait,name=\"Muppet*Vision 3D, Muppet Courtyard, 10 Minute Wait,name=\"Pirates of the Caribbean, Adventureland, 10 Minute Wait,name=\"Primeval Whirl, DinoLand U.S.A., 10 Minute Wait,name=\"Soarin', Future World, 10 Minute Wait,name=\"Spaceship Earth, Future World, 10 Minute Wait,name=\"Star Tours –Adventures Continue, Echo Lake, 10 Minute Wait,name=\"Toy Story Mania!, Pixar Place, 10 Minute Wait,name=\"Twilight Zone Tower of Terror™, Sunset Boulevard, 10 Minute Wait,name=\"Under the Sea ~ Journey ofLittle Mermaid, Fantasyland, 10 Minute Wait,name=\"Jungle Cruise, Adventureland, 15 Minute Wait,name=\"Mission: SPACE, Future World, 15 Minute Wait,name=\"Rock 'n' Roller Coaster Starring Aerosmith, Sunset Boulevard, 15 Minute Wait,name=\"Splash Mountain, Frontierland, 15 Minute Wait,name=\"Astro Orbiter, Tomorrowland, 20 Minute Wait,name=\"Meet Disney Pals at the Epcot Character Spot, Future World, 20 Minute Wait,name=\"Monsters, Inc. Laugh Floor, Tomorrowland, 20 Minute Wait,name=\"Meet Rapunzel and Tiana at Princess Fairytale Hall, Fantasyland, 25 Minute Wait,name=\"Space Mountain, Tomorrowland, 25 Minute Wait,name=\"Enchanted Tales with Belle, Fantasyland, 30 Minute Wait,name=\"Meet Cinderella and Elena at Princess Fairytale Hall, Fantasyland, 30 Minute Wait,name=\"Meet Tinker Bell at Town Square Theater, Main Street, U.S.A., 30 Minute Wait,name=\"Peter Pan's Flight, Fantasyland, 30 Minute Wait,name=\"Test Track, Future World, 30 Minute Wait,name=\"Meet Anna and Elsa at Royal Sommerhus, World Showcase, 40 Minute Wait,name=\"Tomorrowland Speedway, Tomorrowland, 40 Minute Wait,name=\"Frozen Ever After, World Showcase, 45 Minute Wait,name=\"Meet Mickey Mouse at Town Square Theater, Main Street, U.S.A., 55 Minute Wait,name=\"Meet Ariel at Her Grotto, Fantasyland, 65 Minute Wait,name=\"Seven Dwarfs Mine Train, Fantasyland, 80 Minute Wait,name=\"Haunted Mansion, Liberty Square, Temporarily Closed,name=\"Kali River Rapids, Asia, Temporarily Closed\n";

        final Pattern pattern = Pattern.compile(regex);
        final Matcher matcher = pattern.matcher(input1);

        //Create a List String for storing the Wait Time matches that we find
        List<String> waitTimesSorted = new ArrayList<String>();

        //Create a loop that the matcher uses to search through the input string for our Wait Times
        while (matcher.find()) {
            //Add the matching wait times we find to a List String     
            waitTimesSorted.add(matcher.group());              
        }

        //Print our matches to the console
        System.out.println(waitTimesSorted);
[Enchanted Tales with Belle, Fantasyland, 30 Minute Wait,, Meet Cinderella and Elena at Princess Fairytale Hall, Fantasyland, 30 Minute Wait,, Meet Tinker Bell at Town Square Theater, Main Street, U.S.A., 30 Minute Wait,, Peter Pan's Flight, Fantasyland, 30 Minute Wait,, Test Track, Future World, 30 Minute Wait,]