我有字符串biz'baz
。 biz
可以是任何东西,所以像bla'baz
就可以;但是如果字符串变为bizbaz
,我希望它返回bizbaz
,如果baz
从'
开始,则返回任何内容。我怎么能用这个逻辑做些事情?我需要一个预见吗?之后它可能会有更多的字符。如何检查一个单词是否前面有一个字符?
biz'baz
将返回不匹配。
bizbaz
会返回一个匹配(bizbaz
)。
bizbiz'baz
将返回不匹配。
hellohi'bazhello
将返回不匹配。
我有字符串biz'baz
。 biz
可以是任何东西,所以像bla'baz
就可以;但是如果字符串变为bizbaz
,我希望它返回bizbaz
,如果baz
从'
开始,则返回任何内容。我怎么能用这个逻辑做些事情?我需要一个预见吗?之后它可能会有更多的字符。如何检查一个单词是否前面有一个字符?
biz'baz
将返回不匹配。
bizbaz
会返回一个匹配(bizbaz
)。
bizbiz'baz
将返回不匹配。
hellohi'bazhello
将返回不匹配。
尝试:
\Bbaz
的\B
的意思是 “不是一个单词边界”。
单词边界是指您有字母数字字符[A-Za-z0-9]或下划线(由于历史原因计为一个字母)和一个字母,它不是任何这些东西,彼此相邻。
因此: biz'baz - 不匹配:在b旁边有一个“字边界”。
bizbaz - match:b没有字边界。
bizbiz'baz - 不匹配:b旁边有一个“字边界”。
hellohi'bazhello - 不匹配:b旁边有一个“字边界”。
biz @ baz - 不匹配:b旁边有一个“单词边界”。
biz_baz - 匹配:b旁边没有“单词边界”,因为下划线是一个字母,因为愚蠢的原因。
如果下划线的问题,那么你就可以明确地列出你算字的字符,像这样的人物:
[a-zA-Z0-9]+baz
,其行为是相同的,除了两件事情。
1)它不会将下划线视为字母。
2)匹配时,它匹配整个单词,而不仅仅是“baz”部分。
为什么我不能匹配'biz @ baz'或者'biz baz'? – WayneXMayersX
我不明白这个问题。你已经问过前面的字符是单词字符。 @不是一个字的字符。 –
更新了我的回答以澄清。 –
使用先行是一个很好的解决方案。
您可以使用:
/(?!^\p{L}*'\p{L}*(?:\s|$))(^\p{L}+)/
在这种情况下,你需要使用某种形式的有关的锚为先行有道理。您可以使用^
作为该行的开头,但需要一些锚点或'
之后的单词字符进行匹配。
你尝试过什么吗? – anubhava
是的,但我的尝试完全脱离了语境,所以我认为发布我尝试过的东西并不是很有用。 – WayneXMayersX
你使用的是什么正则表达式?你能否给出一个预期的输入/输出清晰的例子? –