替换 PHP 中除首次出现之外的所有特定字符
示例
- 输入 = 1.1.0.1
- 预期输出 = 1.101
Example
- Input = 1.1.0.1
- Expected output = 1.101
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
示例
Example
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(7)
您可以使用 substr() 和 str_replace() 相当容易:
You could make use substr() and str_replace() fairly easily:
匹配零个或多个非点字符,后跟一个点,但前提是匹配前面有一个点。这可以防止初始数字的匹配。仅用在第 1 组中捕获的非点字符(数字)替换匹配项。
Matches zero or more non-dot characters followed by a dot, but only if the match was preceded by a dot. This prevents a match on the initial digit(s). Replaces the match with only the non-dot characters (the digits), which were captured in group #1.
或者
or
代码:(演示)
或使用“继续”字符 (
\G
),消耗并忘记第一个文字点,然后替换所有后续文字点。代码:(演示)
或者简单地检查文字点是否在字符串中前面出现了文字点。
代码:(演示)
Code: (Demo)
Or with the "continue" character (
\G
), consume and forget the first literal dot, then replace all subsequent literal dots.Code: (Demo)
Or simply check that a literal dot has a literal dot occurring earlier in the string.
Code: (Demo)
我虽然
substr_replace()
可以在这里工作,但遗憾的是没有......这是一个正则表达式方法:I though
substr_replace()
would work here, but sadly no... Here is a regex approach:您还可以使用
s
开关尝试以下正则表达式,输出:
You could also try the below regex with
s
switch,Output:
使用正则表达式匹配可以更清晰地描述所需的结果,并避免调用
substr
和strpos
的容易出错的方法。在这里,我假设第一个点之前不需要任何文本,即输入可能以必须保留的点开头。区别在于*
或+
量词是否适合以下模式。如果您的输入始终很短,一个简单的方法是替换尾随点,直到没有剩余:
要使用单个正则表达式匹配来完成此操作,请使用
preg_replace_callback
应用函数 (str_replace
在这种情况下)到反向引用变量$2
。示例结果:
您可能需要试验
Using regex matches can be clearer by depicting the desired result and avoids the error-prone approach of calls to
substr
andstrpos
. Here I assume that no text is required before the first dot, i.e., that an input may begin with a dot that must be preserved. The difference is whether a quantifier of*
or+
is appropriate in the patterns below.If your inputs will always be short, a straightforward approach is to replace trailing dots until none remain:
To do it with a single regex match, use
preg_replace_callback
to apply a function (str_replace
in this case) to the backreference variable$2
.Sample results:
You may want to experiment with the code and test cases at Try It Online!