我正在学习正则表达,导师给了我这个高级练习。
使用
preg_replace
并创建一个可以删除以下字符串开头的所有数字的正则表达式。
01. A little love (2002)
02 - No.1 Star
03 Love Story
对于像我这样的初学者来说这很难,所以我在这里问一下,如果你们能帮助我,我会非常感激。
答案 0 :(得分:0)
我强烈建议您转到Online regex tester and debugger。你将学到很多关于正则表达式的知识,并且会开始认为事情通常不像它们看起来那么难。
在你的情况下,我们假设每一行都在$ line中。如果您的数据在文件中,请转到this question。我们还假设你想要的输出是
A little love (2002)
No .1 Star<br>
Love Story
你可以通过各种方式做到这一点。其中之一
$pattern = '/(^\d+\W+)(\w+.*)/';
$result = preg_replace($pattern, '$2', $line);
答案 1 :(得分:0)
你可以尝试简单的//Author:: Satish Srinivas
#include<bits/stdc++.h>
using namespace std;
int solve(int arr[],int n)
{
sort(arr,arr+n);
int sum[n];
sum[0]=arr[0];
//precompute sums
for(int i=1;i<n;i++)
{
sum[i]=sum[i-1]+arr[i];
}
if(n<=2)
return sum[n-1];
int res=INT_MIN;
for(int i=0;i<=n-3;i++)
{
int min=arr[i]+arr[i+1];
int j=i+1;
while(j<=n-2 && arr[j+1]<=min)
j++;
if(j>i+1)
{
if(i==0)
{
if(res < sum[j]-sum[0])
res=sum[j]-sum[0];
}
else
{
if(res < sum[j]-sum[i-1])
res=sum[j]-sum[i-1];
}
}
}
return res;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
/*
freopen("in.in", "r", stdin);
freopen("out.out", "w", stdout);
*/
int arr1[]={10,4,4,5,4};
int n1=sizeof(arr1)/sizeof(arr1[0]);
cout<<solve(arr1,n1)<<endl;
int arr2[]={25,60,1,5,3,35};
int n2=sizeof(arr2)/sizeof(arr2[0]);
cout<<solve(arr2,n2)<<endl;
return 0;
}
//output:
//13
//120
。
一个例子是:
\d{2}[.\-\s]+
输出
echo preg_replace('@\d{2}[.\-\s]+@', '', $str);
答案 2 :(得分:0)
要获得最快的结果(请参阅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);
答案 3 :(得分:0)
使用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
或短划线\-
。