PHP preg_replace() 与排除
我正在尝试替换这样的字符串: Karcher HDS-C 7/11, 9/15, 8/15-E
为 HDS-C 7/11, 9/15, 8/ 15-E
。
我使用此模式 /[^A-Z0-9\s\.\,\-\/\(\)]/
作为 preg_replace
。 我得到的不是 HDS-C 7/11, 9/15, 8/15-E
,而是 K HDS-C 7/11, 9/15, 8/15- E
带有前导 K
。
所以我的规则:只留下大写的单词(1+字母)、0-9、特殊字符;排除包含小写的单词(2 个以上字母)(第一个字母可以是大写)。
更多示例(输入 => 输出):
Karcher B 140 R Bp
=> B 140 R Bp
Yard-Man YM 84 MW 31AY97KV643
=> YM 84 MW 31AY97KV643
如何调整我的模式以使其正常工作?
我还需要过滤 1+ 个小写的前导单词(可能的首字母为大写)。
例如:
Karcher Karcher B 140 R Bp
=> B 140 R Bp
Karcher Karcher Karcher B 140 R Bp
=> B 140 R Bp
I'm trying to replace such string: Karcher HDS-C 7/11, 9/15, 8/15-E
with HDS-C 7/11, 9/15, 8/15-E
.
I use this pattern /[^A-Z0-9\s\.\,\-\/\(\)]/
for preg_replace
.
Instead of getting HDS-C 7/11, 9/15, 8/15-E
, I'm getting K HDS-C 7/11, 9/15, 8/15-E
with leading K
.
So my rule: leave only words (1+ letters) in uppercase, 0-9, special chars; exclude words (2+ letters) that contain lowercase (first letter can be uppercase).
More examples (input => output):
Karcher B 140 R Bp
=> B 140 R Bp
Yard-Man YM 84 M-W 31AY97KV643
=> YM 84 M-W 31AY97KV643
How can I adjust my pattern to get it work?
I also need to filter 1+ leading words in lowercase (with possible first letter in uppercase).
For example:
Karcher Karcher B 140 R Bp
=> B 140 R Bp
Karcher Karcher Karcher B 140 R Bp
=> B 140 R Bp
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
是否可以针对开头的单词,而不是试图排除其他所有内容?
例如:
'/^(?:[AZ][az-]+[A-Za-z-]* ?)+/'
How about targeting the words at the beginning, instead of trying to exclude everything else?
e.g.:
'/^(?:[A-Z][a-z-]+[A-Za-z-]* ?)+/'
也许尝试匹配第一个空格之后的所有内容?
Maybe try to match everything after first whitespace ?