我有以下正则表达式来查找文本中的单词并突出显示它们
使用word表面进行测试。
/((?<=[\W])surface?(?![\w]))|((?<![\w])surface?(?=[\W]))/iu
它匹配以下文本中的所有出现。
surface-CoP-20-70-0000-04-02_Pre-Run_Tool_Verification_Programming_and_surface_Tare surface_revC.pdf
但是如果我改变第一次出现的曲面以包含一个大写字母,它只匹配第一次出现。
Surface-CoP-20-70-0000-04-02_Pre-Run_Tool_Verification_Programming_and_surface_Tare surface_revC.pdf
或者,如果我在其他一些事件中加上一个大写字母,那么它就匹配了。
Surface-CoP-20-70-0000-04-02_Pre-Run_Tool_Verification_Programming_and_Surface_Tare surface_revC.pdf
答案 0 :(得分:1)
我不知道你想要在那里实现什么,但可能你的问题是\w
将包含_
(而\W
会排除它。)
也许试试这个:
/(?<![a-z])surface(?![a-z])/iu
或者这个:
/(?<=[\W_])surface(?=[\W_])/iu
否则,请提供更多详细信息,说明您确实/不想要匹配的内容。
更新:根据以下信息:
surface2010不应匹配
在这种情况下,我怀疑你想要:
/(?<=\b|_)surface(?=\b|_)/iu
(因为只有\b
会排除包含“... and_surface_Tare ...”的匹配,因此我们将_
的替换添加到其中以包含该内容。)
答案 1 :(得分:0)
我错过了什么吗?
/\bsurface\b/i
答案 2 :(得分:0)
所以你想要surface
不区分大小写,除非它之前或之后是字母或数字?试试这个:
/(?<![A-Za-z0-9])surface(?![A-Za-z0-9])/i
我不使用/u
修饰符(导致正则表达式和主题字符串被视为UTF-8),因为您似乎正在处理纯ASCII文本。 \w
,\W
和\b
不受/u
的影响。