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
are
和 you
并以 $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
【讨论】:
哇,这是一个非常有帮助的答案:)/(?<=\[)[^\]]*(?=\])/g
和 /(?<=\).*?(?=(?<!\\)\)/g
。
见以上两条。如果您需要方括号在其中包含一组大括号(您不应该这样做,因为第二个表达式不会匹配任何内容),您可以使用:/(?<=\[)(?=[^\]]*?\[^\]]*?\)[^\]]*(?=\])/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/string_replace 符号 - 或 * 到空格