我希望能够使用正则表达式来匹配给定的字符串,但不能使用包含它的特定长字。这是一个更好解释的例子:
鉴于文字:
String bellsringing = "The bells are ringing is a String";
我希望能够找到所有“ring”的出现,这些不是单词String的一部分,不仅限于单词(可以出现在单词中)。 所以答案只会是“铃声响起”和“响铃”。
我知道程序可以用于这样的任务,但是我已经满足了在大型库中查找特定字符串的需要,如果搜索到的字符串是普通关键字/文字的子字符串,我有很多挖掘做,并将从IDE使用正则表达式函数搜索中受益:)
感谢您提供任何意见。
答案 0 :(得分:3)
如果你使用PCRE
正则表达式,那么你可以使用这样的正则表达式:
String(*SKIP)(*FAIL)|ring
<强> Working demo 强>
这个正则表达式的想法是失败string
模式,所以它会跳过它但会保留ring
。顺便说一句,如果你想获得完整的单词,你可以使用这个正则表达式:
String(*SKIP)(*FAIL)|(\w*ring\w*)
比赛信息是:
MATCH 1
1. [14-21] `ringing`
MATCH 2
1. [64-71] `ringing`
另一方面,如果你没有使用PCRE
,你可以利用丢弃模式,这是一个非常好的正则表达技巧:
String|(\w*ring\w*)
<强> Working demo 强>
在这种情况下,您所做的是匹配模式左侧不想要的内容,同时在最正确的部分保持您想要的 < strong>使用群组。丢弃模式遵循以下规则:
discard patt1 | discard patt2 | ... | discard pattN | (KEEP THIS PATTERN)
然后,您必须访问正则表达式组\1
或$1
才能获取已保存的字符串。对于这种情况是:
MATCH 1
1. [14-21] `ringing`
MATCH 2
1. [64-71] `ringing`
Debuggex以图形方式显示这项技术做得很好:
答案 1 :(得分:2)
答案 2 :(得分:0)