0

我正在尝试用点(。)“123”替换行号。使用正则表达式。例如这条线是,

123. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

在这里,我想摆脱“123”。这是在行的开头。目前,我拥有替换行中任何位置的任何数字和点(。)的代码,但我只想在行首删除数字和点(。)。这是我的代码,

<?php
$pattern = '/[0-9. |0-9.](?:\d{0})/';
$replacement = ' ';
$try= preg_replace($pattern, $replacement, $line);
echo "\r\n" . html_entity_decode($try);
?>

如果有人能指出我正确的方向,我将不胜感激。谢谢

4

7 回答 7

2

为什么你的模式不起作用?你有两个问题:

[0-9. |0-9.]

括号是一个字符类。他们的意思是“匹配任何字符之一”。因此,您的正则表达式的这一部分所做的是匹配单个字符,即数字、点、空格或 |。

您似乎正在尝试创建一个匹配组。在这种情况下,您将需要括号而不是方括号。这样的事情会做你想要完成的事情:

([0-9]+\.|[0-9]+\. )

这将匹配一些数字,后跟一个点,并且可能后跟一个空格。但是,您可以让它变得更简单:

[0-9]+\. ?

使?您可以消除长表达式,因为它表示“可能模式包含空格”。

不过,您可以走得更远:

\d+\.\s*

\d匹配任何数字,并\s匹配任何空格。 *意味着您将匹配任意数量的空格,而不是单个空格。

最后,您的模式中也有这个:

(?:\d{0})

我不确定您要做什么,但这表示“匹配包含恰好零位的组”。这没有多大意义,也没有必要。

您的最终模式可以简单地是这样的:

'/^\d+\.\s*/'

最后一个添加是^在开始时。这可确保您仅匹配位于行首的数字。

于 2013-01-30T12:18:36.070 回答
1

试试这个模式:

$pattern = '/^\d+\.\s?/';
于 2013-01-30T11:52:31.037 回答
1

试试这个代码..

$line = '123. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">';
$pattern = '/^[0-9]+\./';
$replacement = "";
$try= preg_replace($pattern, $replacement, $line);
echo "\r\n" . html_entity_decode($try);

结果
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

键盘

于 2013-01-30T12:02:27.290 回答
0

这里不需要任何正则表达式,ltrim可以:

$line = ltrim($line, "0123456789. ");
于 2013-01-30T11:52:49.747 回答
0

一行开头的数字后跟一个句点将是:

^[0-9]+\.

请注意转义句点,使其匹配句点而不是任何字符。

于 2013-01-30T11:53:10.873 回答
0

你为什么不使用爆炸

如果您知道您的行以数字开头:

$initial_string = '123. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">';
$desired_string = explode('.', $initial_string, 2)[1];
print $desired_string;

编辑:如果您不确定一行是否以数字开头:

$initial_string = '<html xmlns="http://wwww3org/1999/xhtml" xml:lang="en" lang="en">';
$initial_arr = explode('.', $initial_string, 2);

if (count($initial_arr)>0 && ctype_digit($initial_arr[0])){
    $desired_string = $initial_arr[1];
}else{
    $desired_string = $initial_string;
}
print $desired_string;
于 2013-01-30T11:53:32.560 回答
0

您需要使用反斜杠 (\) 转义点 (.),否则点匹配任何字符。所以使用“\”。匹配一个点和“。” 匹配任何字符。

于 2013-01-30T11:53:53.333 回答