preg_replace 这个:123.. - 可能是一个简单的 PHP / preg_replace / RegEx 问题,但老实说我很难过

Posted

技术标签:

【中文标题】preg_replace 这个:123.. - 可能是一个简单的 PHP / preg_replace / RegEx 问题,但老实说我很难过【英文标题】:preg_replace this: 123.. -- Likely a simple PHP / preg_replace / RegEx issue but I am honestly stumpedpreg_replace 这个:123.. - 可能是一个简单的 PHP / preg_replace / RegEx 问题,但老实说我很难过 【发布时间】:2014-11-27 00:47:27 【问题描述】:

从事个人项目我正在使用 php,我想针对以下字符串运行 preg_replace_callback 函数:

1. hello
2. hellotherehowareyou

我想检测 hello there how areyou 并以 $matches[0-4] 的形式发送到函数(或者可能有很多,需要从 1 到无穷大)。

以上内容对我来说并不太难,但我也很喜欢,所以如果我传递这个字符串:

3. hellotherehowareyou blabla IAmFineThanks for asking

我发送$matches[0-X] 的功能应该运行两次,因为我设计的小 系统打开和关闭两次!

模式也应该忽略 text just on its own like this 并且应该运行 text like this, i.e. just one box。

如果我可以输入带有反斜杠作为条件的内容,例如:

4. ignore this next closing curly bracket \ as the slash makes it text

...然后它还可以删除现在不需要的反斜杠...嗯...这将获得大量奖励积分!!

这也是preg_replace_callback,所以我需要将整个 thinghere 替换为函数返回的任何内容。

这很简单吗?还是硬?我被困住了!

虽然热爱学习,但如果有人能帮助我,那将比您想象的更感激。谢谢!

编辑附言如果像我上面解释的那样做起来太难了,我会接受它为类似的东西工作:

[hellotherehowareyou]

使用方括号和花括号 - 但这不太理想......

【问题讨论】:

你尝试的代码在哪里? 每行输入只能使用一批“foobar”(当它应该为“foo1bar1 foo2 bar2") 并且它没有做 或 文本的 \ 技巧......所以它有点无用的混乱我没有发布以避免混淆。 【参考方案1】:

可变数量的捕获组是不可能的;但是,您可以进行全局匹配并匹配所有这些(但几乎不可能看到它来自第一组还是第二组,例如#3):

(?:\G(?!\A)|\)[^]*?\K\(.*?)(?<!\\)\

Demo


附:下面是一个表达式示例,说明为什么变量捕获组是不可能的。重复的捕获组将被每个匹配替换,内容将与最终匹配的内容相同:(a)+bc

【讨论】:

哇,这是一个非常有帮助的答案:) /(?&lt;=\[)[^\]]*(?=\])/g/(?&lt;=\).*?(?=(?&lt;!\\)\)/g 见以上两条。如果您需要方括号在其中包含一组大括号(您不应该这样做,因为第二个表达式不会匹配任何内容),您可以使用:/(?&lt;=\[)(?=[^\]]*?\[^\]]*?\)[^\]]*(?=\])/g ***.com/q/3746487 Palindrome,与括号平衡非常相似。或者我在这里对另一个问题的回答:***.com/questions/16258143/…。不过,我不明白 OP 想要什么,所以我不在这里写答案。 有趣的问题@mrmrw 并联系 Sam +1 I also played with it

以上是关于preg_replace 这个:123.. - 可能是一个简单的 PHP / preg_replace / RegEx 问题,但老实说我很难过的主要内容,如果未能解决你的问题,请参考以下文章

preg_replace 密码过滤器

PHP str_replace()字符串匹配

preg_replace/string_replace 符号 - 或 * 到空格

将字符串转换为可单击的URL

php - preg_replace 突出显示格式化的电话号码

用preg_replace替换字符