有没有办法缩短这个正则表达式

时间:2014-03-25 16:59:05

标签: php regex

我不是很擅长正则表达式所以我已经破解了一个忽略空格或新行的解决方案

这是我的字符串,我试图找到匹配

    $str = 'name="something"> function
    (para
    m)';

字符串可能在任何地方都有换行符或空格。请注意,我不希望在\ n或\ r或\ n上包含字符串替换的实现,因为我的真实字符串是包含人类可读文本的PDF文件。

我目前的解决方案是将每个角色包裹在(MY CHAR HERE)(\ s)*中,因为您可以想象我的正则表达式对于一个大的搜索字符串来说会相当大,即

    (n)(\s)*(a)(\s)*(m)(\s)*(e)(\s)*(=)(\s)*(")(\s)*(s)(\s)*(o)(\s)*(m)(\s)*(e)(\s)*(t)(\s)*

等..............

是否有更简单/更清洁的解决方案?

我的最终目标是做preg_replace

所以希望这样的事情

    $pattern = ''; //My new pattern here

    $str = 'name="something"> function
    (para
    m)';

    $replace = 'name="something"> different function(param1, param2){} function(param)';
    echo preg_replace($pattern, $replace, $str);

3 个答案:

答案 0 :(得分:1)

您可以动态构造一个正则表达式,在每个char之间添加\s*

我看过非常大的正则表达式字符串,所以这不是一个问题。它可能是
有点慢,但不是太多,我不认为。

将字符串拆分为字符,用'\ s *'连接,然后使用正则表达式。
从物理上来说,你可以更好地看到它(使用其中一种正则表达式格式程序) -

n\s*a\s*m\s*e\s*=\s*"\s*s\s*o\s*m\s*e\s*t\s*

 n \s* 
 a \s* 
 m \s* 
 e \s* 
 = \s* 
 " \s* 
 s \s* 
 o \s* 
 m \s* 
 e \s* 
 t \s* 

答案 1 :(得分:1)

构建模式的更好方法:

$pattern = preg_replace('@\s+@', "\s+", preg_quote($str));

答案 2 :(得分:0)

您可以先剥离所有空格,然后根据结果运行匹配。更容易;)