我想构建一个模式来交换整数,这是行中唯一的东西
如果与整数在同一行上有一个单词,我不想改变任何内容。
我试过$pattern = '/(.)[0-9][0-9](.)/';
但这对我来说效果不好
当我尝试例如$pattern = '/1(.)2(.)3(.)/';
时,它将替换我将放入模式的唯一单个数字
我想替换此
的示例主题subject = "
1
2
3
4
5
6
7
8
9
10
"
数字必须是整数而不是小数,而且它们的长度是随机的,但是在数字的同一行上没有任何文字?
有什么想法吗?
答案 0 :(得分:2)
正则表达不是一个魔术棒,它是每个编程问题的答案。
在这种情况下,您希望实际使用explode()
在\n
上拆分主题,然后将这些行操作为数组,然后使用implode()
重新创建主题。当它们是$lines[$x]
和$lines[$y]
时,处理两条线要容易得多。
此外,如果这些行来自HTML,那么您不希望使用正则表达式来解析HTML。相反,您想要使用PHP DOM模块。 http://php.net/manual/en/book.dom.php
答案 1 :(得分:1)
您需要的是多行模式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
,以便不删除<br>
代码。
但正如Andy所说,HTML不应该使用正则表达式来处理。要么使用PHP提供的内置DOM模块,要么使用像this one这样的第三方库。