Regex to first occurrence only?

前端 未结 4 1106
暖寄归人
暖寄归人 2020-11-29 11:18

Let\'s say I have the following string:

this is a test for the sake of testing. this is only a test. The end.

and I want to se

相关标签:
4条回答
  • 2020-11-29 11:50

    For me, simply remove /g worked.

    See https://regex101.com/r/EaIykZ/1

    0 讨论(0)
  • 2020-11-29 12:04

    * is a greedy quantifier. That means it matches as much as possible, i.e. what you are seeing. Depending on the specific language support for regex, you will need to find a non-greedy quantifier. Usually this is a trailing question mark, like this: *?. That means it will stop consuming letters as soon as the rest of the regex can be satisfied.

    There is a good explanation of greediness here.

    0 讨论(0)
  • 2020-11-29 12:06

    The regex is greedy meaning it will capture as many characters as it can which fall into the .* match. To make it non-greedy try:

    this(.*?)test

    The ? modifier will make it capture as few characters as possible in the match.

    0 讨论(0)
  • 2020-11-29 12:06

    Andy E and Ipsquiggle have the right idea, but I want to point out that you might want to add a word boundary assertion, meaning you don't want to deal with words that have "this" or "test" in them-- only the words by themselves. In Perl and similar that's done with the "\b" marker.

    As it is, this(.*?)test would match "thistles are the greatest", which you probably don't want.

    The pattern you want is something like this: \bthis\b(.*?)\btest\b

    0 讨论(0)
提交回复
热议问题