[英]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.