.*?不匹配单词边界之前的字符
.*? does not match character before word boundary
我很难理解为什么 ((?i)\bb.*?\b)
returns b
而不是 b-
字符串 a b- c
。我也试过 ((?i)\bb\w*\b)
,但效果并不好。
更多信息:
我需要匹配文本中的单词。我需要检索所有以字母 b
开头的单词。而 'words' 几乎意味着任何以 b
开头的字符串,例如 b
、b-
、b'
、b"
等。 'words' 我需要匹配当然不限于示例中的 space
.*?
是最小的,所以 b.*?\b
找到 b
之后的第一个单词边界。由于 b
是单词字符,而 -
不是,因此第一个单词边界位于这些字符之间。
ETA:事实是,regexen 不会将您的 'words' 视为单词,因此 \b
对它们不起作用。你说你的 'words' 并不总是以 space 结尾。而且,很明显,它们不会以连字符结尾。更确切地说,它们是如何结束的?
这应该会给你想要的结果:
(b.*?)(?:\s|$)
我已经在 a b- c bfdf b32=" dfa b. b---s asd b
上测试过了。
您似乎不是在寻找 单词 ,而是在寻找任何以字母 "b" 开头并由 space(或其他?)人物)。您的原始模式不起作用,因为“-”不符合单词的一部分。祝你好运。
注意:上面的模式非常简单,带 $ 的最后部分在那里,因此捕获了行尾的最后一个 "b"。
*
被称为"greedy"quantifier。它将匹配尽可能多的前面模式的迭代。大多数时候,这正是您想要的,但有时您想要使用 "lazy" 量词,这意味着它将尽可能匹配 few,包括 0.
要构成量词 "lazy",请添加问号:*?
、+?
、??
等
现在,答案的下一部分是 word boundaries 的工作原理。单词边界将匹配 位置 ,其中 "word characters"(0-9、a-z 和 _)和 "non-word characters" 之间有一个 "break"。 -
是非单词字符,因此 b-
、-c
和 c
之间的位置都可以。
因为您有一个惰性量词并且在 b
之后有一个单词边界,这就是您的正则表达式将匹配的所有内容。
与其尝试使用单词边界来查找单词的结尾,不如像这样匹配单词字符和破折号,这会自然地将所有内容与单词的 "end" 匹配:
\bb[-\w]*
看到一个working example
我很难理解为什么 ((?i)\bb.*?\b)
returns b
而不是 b-
字符串 a b- c
。我也试过 ((?i)\bb\w*\b)
,但效果并不好。
更多信息:
我需要匹配文本中的单词。我需要检索所有以字母 b
开头的单词。而 'words' 几乎意味着任何以 b
开头的字符串,例如 b
、b-
、b'
、b"
等。 'words' 我需要匹配当然不限于示例中的 space
.*?
是最小的,所以 b.*?\b
找到 b
之后的第一个单词边界。由于 b
是单词字符,而 -
不是,因此第一个单词边界位于这些字符之间。
ETA:事实是,regexen 不会将您的 'words' 视为单词,因此 \b
对它们不起作用。你说你的 'words' 并不总是以 space 结尾。而且,很明显,它们不会以连字符结尾。更确切地说,它们是如何结束的?
这应该会给你想要的结果:
(b.*?)(?:\s|$)
我已经在 a b- c bfdf b32=" dfa b. b---s asd b
上测试过了。
您似乎不是在寻找 单词 ,而是在寻找任何以字母 "b" 开头并由 space(或其他?)人物)。您的原始模式不起作用,因为“-”不符合单词的一部分。祝你好运。
注意:上面的模式非常简单,带 $ 的最后部分在那里,因此捕获了行尾的最后一个 "b"。
*
被称为"greedy"quantifier。它将匹配尽可能多的前面模式的迭代。大多数时候,这正是您想要的,但有时您想要使用 "lazy" 量词,这意味着它将尽可能匹配 few,包括 0.
要构成量词 "lazy",请添加问号:*?
、+?
、??
等
现在,答案的下一部分是 word boundaries 的工作原理。单词边界将匹配 位置 ,其中 "word characters"(0-9、a-z 和 _)和 "non-word characters" 之间有一个 "break"。 -
是非单词字符,因此 b-
、-c
和 c
之间的位置都可以。
因为您有一个惰性量词并且在 b
之后有一个单词边界,这就是您的正则表达式将匹配的所有内容。
与其尝试使用单词边界来查找单词的结尾,不如像这样匹配单词字符和破折号,这会自然地将所有内容与单词的 "end" 匹配:
\bb[-\w]*
看到一个working example