簡體   English   中英

有沒有辦法縮短這個正則表達式

[英]Is there a way to shorting this regular expression

我不太擅長正則表達式,所以我破解了一種忽略空格或換行的解決方案

這是我試圖找到匹配項的字符串

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

該字符串可能在任何地方都有換行符或空格。 請注意,我不希望實現包含\\ n或\\ r或“”上的字符串替換的實現,因為我的真實字符串是包含人類可讀文本的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);

您可以動態構造一個正則表達式以在每個字符之間添加\\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* 

一種更好的方式來構建模式:

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

您可以先去除所有空格,然后對結果進行匹配。 容易得多;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM