这些字符串的最佳正则表达式?

时间:2017-11-04 04:36:24

标签: php regex preg-replace

我正在学习正则表达,导师给了我这个高级练习。

  

使用preg_replace并创建一个可以删除以下字符串开头的所有数字的正则表达式。

01. A little love (2002)
02 - No.1 Star
03 Love Story
对于像我这样的初学者来说这很难,所以我在这里问一下,如果你们能帮助我,我会非常感激。

4 个答案:

答案 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);

演示:https://webpack.js.org/loaders/babel-loader/

答案 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或短划线\-