我有字符串biz'baz
。 biz
可以是任何东西,所以像bla'baz
这样的东西就可以了;但如果字符串变为bizbaz
,我希望它返回bizbaz
,如果baz
前面有'
,则返回任何内容。我怎么能用这个逻辑做点什么呢?我需要前瞻吗? baz
之后可能会有更多字符。
biz'baz
将不会返回任何匹配项。
bizbaz
会返回一个匹配项(bizbaz
)。
bizbiz'baz
将不会返回任何匹配项。
hellohi'bazhello
将不会返回任何匹配项。
答案 0 :(得分:1)
答案 1 :(得分:1)
使用先行是一个很好的解决方案。
您可以使用:
/(?!^\p{L}*'\p{L}*(?:\s|$))(^\p{L}+)/
在这种情况下,你需要使用某种形式的相关锚来使前瞻有意义。您可以使用^
作为行的开头,但需要一些锚点或'
之后的单词字符匹配。
答案 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”部分。