OK, thanks, good information. Clearly support for named groups is the most important thing missing from MatchResult.

s'marks

On 12/4/20 11:43 PM, Cay Horstmann wrote:
Hi Stuart,

1: If there is no match at all, then results yields the empty stream. I don't think anything else is required.

2/3: I wrote a fair number of regex patterns in Java, ever since they appeared in 2002. I can say with confidence that I never once used hitEnd/requireEnd, or seen it used. I note they occur in one file in the JDK 11 source, in the Scanner class. But not in a loop that fetches all matches, but after a single call to find or lookingAt. I think these are exceedingly uncommon.

In contrast, looping over matcher.find() and extracting groups is common, and named groups are a best practice (https://urldefense.com/v3/__https://eslint.org/docs/rules/prefer-named-capture-group__;!!GqivPVa7Brio!I3YBH6KonWfqm4zW7pQRatPsLcj4rRjGOveB6NWQedZVU8BeJ3hknZcPy7rC1G2fug$ ).

Cheers,

Cay

Il 04/12/2020 19:53, Stuart Marks ha scritto:
Hi Cay,

Thanks for mentioning this. It's good to know that adding this provides value to people who are actually trying to use this stuff (as opposed to adding stuff merely for the sake of completeness, as often seems to arise).

I've added some notes to JDK-8065554.

Looking at this more closely, it seems to me that MatchResult ought to include more match-result-related information that's currently only in Matcher, namely:

1. whether there was a match at all
2. hitEnd
3. requireEnd

If you have any thoughts on these, please let me know.

s'marks

On 12/2/20 2:53 AM, Cay Horstmann wrote:
Hello, I'd like to raise awareness for

https://bugs.openjdk.java.net/browse/JDK-8180352
https://bugs.openjdk.java.net/browse/JDK-8072984
https://bugs.openjdk.java.net/browse/JDK-8065554

These all ask for MatchResult.group(String name). What they don't mention is that this is more urgent in light of the methods

Stream<MatchResult> Matcher.results() // https://bugs.openjdk.java.net/browse/JDK-8071479 Stream<MatchResult> Scanner.findAll(Pattern pattern) // https://bugs.openjdk.java.net/browse/JDK-8072722

In particular, Matcher.results() seems a cleaner way of collecting match results than calling while (matcher.find()).

But then MatchResult needs to support the same queries that Matcher provides. I believe the only missing one is group(String name).

Cheers,

Cay

NB. There are related requests that ask for finding group names in patterns, or for correlating group names and numbers. I have formed no opinion on their merits.


Reply via email to