3

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

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

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

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

我想替换此示例主题

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

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

有任何想法吗?

4

2 回答 2

2

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

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

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

于 2012-12-02T14:47:02.147 回答
1

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

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

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

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

并将您的替换字符串更改为

$1yourReplacementString$2

编辑:

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

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

同样,您需要在替换字符串周围添加$1$2周围以不删除<br>标签。

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

于 2012-12-02T12:13:06.467 回答