如何检查单词前面是否有字符?

时间:2017-08-17 19:50:08

标签: regex

我有字符串biz'bazbiz可以是任何东西,所以像bla'baz这样的东西就可以了;但如果字符串变为bizbaz,我希望它返回bizbaz,如果baz前面有',则返回任何内容。我怎么能用这个逻辑做点什么呢?我需要前瞻吗? baz之后可能会有更多字符。

biz'baz将不会返回任何匹配项。

bizbaz会返回一个匹配项(bizbaz)。

bizbiz'baz将不会返回任何匹配项。

hellohi'bazhello将不会返回任何匹配项。

3 个答案:

答案 0 :(得分:1)

您正在寻找字符否定:

/[^']baz/

如果你想匹配整个句子:

/.*[^']baz.*/

Check the live example.

答案 1 :(得分:1)

使用先行是一个很好的解决方案。

您可以使用:

/(?!^\p{L}*'\p{L}*(?:\s|$))(^\p{L}+)/

demo

在这种情况下,你需要使用某种形式的相关锚来使前瞻有意义。您可以使用^作为行的开头,但需要一些锚点或'之后的单词字符匹配。

答案 2 :(得分:0)

尝试:

\Bbaz

\B表示“不是单词边界”。

字边界是指字母数字字符[A-Za-z0-9]或下划线(由于历史原因而被视为字母),以及不是任何字母的字母,下一个彼此。

所以:   biz'baz - 不匹配:b旁边有一个“单词边界”。

bizbaz - 匹配:b没有单词边界。

bizbiz'baz - 不匹配:b旁边有一个“单词边界”。

hellohi'bazhello - 不匹配:b旁边有一个“单词边界”。

biz @ baz - 不匹配:b旁边有一个“单词边界”。

biz_baz - 匹配:b旁边没有“单词边界”,因为下划线是一封信,因为愚蠢的原因。

如果下划线很重要,那么你可以明确地列出你算作单词字符的字符,如下所示:

[a-zA-Z0-9]+baz

除了两件事之外,其行为相同。

1)它不会将下划线视为字母。

2)在比赛中,它匹配整个单词,而不仅仅是“baz”部分。