How to match, but not capture, part of a regex?

前端 未结 7 1577
清酒与你
清酒与你 2020-11-28 00:10

I have a list of strings. Some of them are of the form 123-...456. The variable portion \"...\" may be:

  • the string \"apple\" followed by a hyphen,
7条回答
  •  Happy的楠姐
    2020-11-28 00:57

    The only way not to capture something is using look-around assertions:

    (?<=123-)((apple|banana)(?=-456)|(?=456))
    

    Because even with non-capturing groups (?:…) the whole regular expression captures their matched contents. But this regular expression matches only apple or banana if it’s preceded by 123- and followed by -456, or it matches the empty string if it’s preceded by 123- and followed by 456.

    |Lookaround  |    Name      |        What it Does                       |
    -----------------------------------------------------------------------
    |(?=foo)     |   Lookahead  | Asserts that what immediately FOLLOWS the |
    |            |              |  current position in the string is foo    |
    -------------------------------------------------------------------------
    |(?<=foo)    |   Lookbehind | Asserts that what immediately PRECEDES the|
    |            |              |  current position in the string is foo    |
    -------------------------------------------------------------------------
    |(?!foo)     |   Negative   | Asserts that what immediately FOLLOWS the |
    |            |   Lookahead  |  current position in the string is NOT foo|
    -------------------------------------------------------------------------
    |(?

提交回复
热议问题