# Function nom::multi::many1_count

source · [−]

    pub fn many1_count<I, O, E, F>(f: F) -> impl FnMut(I) -> IResult<I, usize, E> where
        I: Clone + InputLength,
        F: Parser<I, O, E>,
        E: ParseError<I>,

Expand description

Runs the embedded parser, counting the results.

This stops on `Err::Error` if there is at least one result. To instead chain an error up, see `cut`.

## Arguments

- `f` The parser to apply.

Note: If the parser passed to `many1` accepts empty inputs (like `alpha0` or `digit0`), `many1` will return an error, to prevent going into an infinite loop.

    use nom::multi::many1_count;
    use nom::bytes::complete::tag;

    fn parser(s: &str) -> IResult<&str, usize> {
      many1_count(tag("abc"))(s)
    }

    assert_eq!(parser("abcabc"), Ok(("", 2)));
    assert_eq!(parser("abc123"), Ok(("123", 1)));
    assert_eq!(parser("123123"), Err(Err::Error(Error::new("123123", ErrorKind::Many1Count))));
    assert_eq!(parser(""), Err(Err::Error(Error::new("", ErrorKind::Many1Count))));