我正在尝试用点(。)“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);
?>
如果有人能指出我正确的方向,我将不胜感激。谢谢
答案 0 :(得分:2)
为什么你的模式不起作用?你有两个问题:
[0-9. |0-9.]
括号是一个角色类。他们的意思是“匹配任何一个角色”。那么你的正则表达式的这一部分是匹配单个字符,即数字,点,空格或|。
您似乎正在尝试创建匹配的组。在这种情况下,您需要括号而不是括号。像这样的事情会做你想要完成的事情:
([0-9]+\.|[0-9]+\. )
这将匹配一些数字后跟一个点,并可能后跟一个空格。但是,你可以做得更简单:
[0-9]+\. ?
?
使您可以消除长表达式,因为它意味着“可能模式包含空格”。
你可以走得更远,但是:
\d+\.\s*
\d
匹配任何数字,\s
匹配任何空格。 *
表示您将匹配任意数量的空格,而不是单个空格。
最后,你的模式中也有这个:
(?:\d{0})
我不确定你要做什么,但这说“匹配一个包含完全零位数的组”。它没有多大意义,也没有必要。
您的最终模式可以是:
'/^\d+\.\s*/'
最后一个添加是^
开头。这样可以确保只在数字位于行的开头时匹配数字。
答案 1 :(得分:1)
尝试这种模式:
$pattern = '/^\d+\.\s?/';
答案 2 :(得分: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">
答案 3 :(得分:0)
这里不需要任何正则表达式,ltrim
会这样做:
$line = ltrim($line, "0123456789. ");
答案 4 :(得分:0)
数字后跟一行开头的句号将是:
^[0-9]+\.
注意转义句点,使其匹配句点而不是任何字符。
答案 5 :(得分:0)
为什么不使用explode?
如果您知道您的行以数字开头:
$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;
答案 6 :(得分:0)
你需要用反斜杠(\)来转义点(。),否则点匹配任何字符。 所以使用&#34; \。&#34;匹配一个点和&#34;。&#34;匹配任何角色。