这些字符串的最佳正则表达式?
问题描述:
我正在学习正则表达式和导师给了我这个先进的锻炼。这些字符串的最佳正则表达式?
使用
preg_replace
并创建一个正则表达式,该正则表达式可以在下列字符串的开始处删除所有数字。
01. A little love (2002)
02 - No.1 Star
03 Love Story
这是相当困难的像我这样的初学者,所以我在这里要问,我会很感激,如果你们能帮助我与此有关。
答
我强烈建议你去Online regex tester and debugger。你将学到很多有关正则表达式的知识,并会开始认为事情通常并不像表面上那么难。
在你的情况,让我们假设每条线位于$线。如果您的数据在文件中,请转至this question。让我们还假设你想要的输出是
A little love (2002)
No .1 Star<br>
Love Story
你coud做,以各种方式。其中一人
$pattern = '/(^\d+\W+)(\w+.*)/';
$result = preg_replace($pattern, '$2', $line);
答
你可以尝试一些简单的\d{2}[.\-\s]+
。
一个例子是:
echo preg_replace('@\d{2}[.\-\s][email protected]', '', $str);
输出
A little love (2002)
No.1 Star
Love Story
答
对于最快的结果(见在regex101的步数),使用:
/^[^A-Z]+/m
Pattern Demo Link
- 出发锚
^
。 - 一个否定的字符类,列出所有大写字母
- 贪婪“一个或多个”量词
- ,并在图案的端部的多线标志/改性剂
输出:
A little love (2002)
No.1 Star
Love Story
PHP代码:(Demo)
$input='01. A little love (2002)
02 - No.1 Star
03 Love Story';
echo preg_replace('/^[^A-Z]+/m','',$input);
答
使用PHP的multiline modifier这一点,这样你能够在每行各自独立的线的开始检测前置号码并删除不需要的字符。
参见:https://regex101.com/r/G3AzSx/1
<?php
$string = '
01. A little love (2002)
02 - No.1 Star
03 Love Story
';
$string = preg_replace('/^[0-9.\s\-]+/m', '', $string);
这就给了你:
A little love (2002)
No.1 Star
Love Story
打破下来你:/^[0-9.\s\-]+/m
- 要在多行模式的行轧花
^
- 由一个或多个数字
0-9
,点.
,空白\s
或破折号\-
其次。
你可以在第一个空格之前删除所有东西 – nogad
我知道使用'substr'等其他函数比较容易,但是我不能这样做,因为这是他的练习。 –
到目前为止您尝试过什么? – Ibrahim