PHP preg_replace() 与排除

发布于 2024-10-19 13:47:53 字数 806 浏览 2 评论 0原文

我正在尝试替换这样的字符串: Karcher HDS-C 7/11, 9/15, 8/15-EHDS-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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

傾城如夢未必闌珊 2024-10-26 13:47:53

是否可以针对开头的单词,而不是试图排除其他所有内容?

例如:'/^(?:[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-]* ?)+/'

桃酥萝莉 2024-10-26 13:47:53

也许尝试匹配第一个空格之后的所有内容?

/.*? (.*)/

Maybe try to match everything after first whitespace ?

/.*? (.*)/
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文