【问题标题】:regexp for preg_replacepreg_replace 的正则表达式
【发布时间】:2012-12-02 09:03:52
【问题描述】:

我想建立一个模式来交换整数,这是唯一的东西

如果有一个单词与整数在同一行,我不想更改任何内容。

我试过$pattern = '/(.)[0-9][0-9](.)/'; 但这对我来说效果不佳

当我尝试例如 $pattern = '/1(.)2(.)3(.)/'; 时,它将替换我将放入模式中的唯一单个数字

我想替换这个示例主题

subject = "
1
2
3
4
5
6
7
8
9
10
"

数字必须是整数而不是小数,并且其中的一部分是随机的,但不能有任何文本与数字在同一行?

有什么想法吗?

【问题讨论】:

  • 你要替换什么?
  • 我想用没有文本的随机整数替换同一行中的 html 输出代码将是 1
    2
    3 所以我想要替换这个整数,我不会替换的例子是 1 kakm
    2 sept
    3 hsss
  • @WebtranslateZapraszamy 是的,我们明白了。但是你想用什么替换它们
  • 我有替换 这项工作我唯一没有的是正则表达式代码来解析这个整数

标签: php regex preg-replace


【解决方案1】:

正则表达式不是解决所有编程问题的魔法棒。

在这种情况下,听起来您实际上想使用explode() 来拆分\n 上的主题,然后将这些行作为数组操作,然后使用implode() 重新创建主题。当它们是$lines[$x]$lines[$y] 时,处理两行要容易得多。

此外,如果这些行来自 HTML,那么您不希望使用正则表达式来解析 HTML。相反,您想使用 PHP DOM 模块。 http://php.net/manual/en/book.dom.php

【讨论】:

  • 你们俩都知道我应该使用 PHP DOM 现在我意识到我做错了我应该使用 dom 模块的方式会使这个更短和最快的检查它已经谢谢
【解决方案2】:

您需要的是多行模式m。如果您使用它,^ 匹配开头,$ 匹配每行末尾。然后将\d+ 用于任意长整数:

/^[ \t]*\d+[ \t]*$/m

[ \t]* 允许除数字之外的任意数量的空格和制表符。请注意,这将删除空格以及数字。如果要保留空格,请使用

/^([ \t]*)\d+([ \t]*)$/m

并将替换字符串更改为

$1yourReplacementString$2

编辑:

我现在意识到您没有换行符,例如 \r\n\r\n<br> 标记。这使它变得更加困难。这样的事情应该涵盖大多数情况:

~((?:^|<br[ ]*/?>)[ \t]*)\d+([ \t]*(?:$|<br\b))~

同样,您需要在替换字符串周围添加$1$2,以免删除&lt;br&gt; 标签。

但正如 Andy 所说,不应该使用正则表达式来处理 HTML。要么使用 PHP 提供的内置 DOM 模块,要么使用一些 3rd 方库,如 this one

【讨论】:

  • /^\d+$/m 在 php 代码示例中对我不起作用 2
    3
    abcdef1"; echo preg_replace($pattern, $replacement, $subject); ?> 它仍然输出数字 1 2 3 和 abcdef1 我想从中删除 1 2 3
  • 啊,对了,所以你也有空格。这对我来说不算是“数字是唯一的东西”;)。不过我会编辑答案
  • 嗯,我放弃了伙计们,但感谢您的回答,我无法弄清楚 /^([ \t]*)\d+([ \t]*)$/m 和 /^[ \t] *\d+[ \t]*$/m 对我不起作用抱歉浪费时间我会尝试预匹配另一个网页以获取他们的变量
  • @WebtranslateZapraszamy 哦,该死的,我现在意识到您的换行符不是实际的换行符,而是&lt;br&gt; HTML 标记。那变化很大。我将再次编辑我的答案。
  • 谢谢,现在对我来说效果很好。我知道我应该使用 html 标签,但我在使用 php snoopy.class 替换 preg 后这样做,但昨天我制作了一个带有多个 preg 替换的非常长的脚本网站上的everythink并在一些文本之前添加变量,然后我将这些变量输入到新脚本中,使用while和echo sql update for zen-cart系统,它会自动将这些变量添加到表中;]嗯,我终于完成了谢谢大家
猜你喜欢
  • 2011-05-20
  • 2016-07-11
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多