php
  • regex
  • 2016-04-26 146 views -1 likes 
    -1

    我有一個句子包含了一些錯誤的單詞字(錯一個字包括超過1個特殊字符:== >> << ?? .. ,, !! ## $$ %% // ** -- ++ ex ...查找包含特殊字符用PHP正則表達式

    我用preg_match_all()來算,但結果是錯誤的 可以。你幫我修復它

    str = "you he==rt are my heart 4++5=9 9-8===1" 
    $pattern = '/[^\s]*(?:[\+]{2,}|[\%]{2,}|[\-]{2,}|[=]{2,}|[<]{2,}|[>]{2,}|[\*]{2,}|[\/]{2,}|[\:]{2,}|[\.]{2,}|[\?]{2,})/'; 
    

    結果

    he== 
    4++ 
    8=== 
    

    我需要找到的結果是什麼

    he==rt 
    4++5=9 
    9-8===1 
    

    謝謝!

    +0

    到目前爲止yoiu已嘗試過哪些代碼,以便我們可以支持您查找問題? –

    回答

    2

    您可以使用

    (?=(?:\S*[^\w\s]){2,})\S+ 
    

    regex demo

    詳情:

    • (?=(?:\S*[^\w\s]){2,}) - 來檢查,如果,在當前位置後,有2個或多個序列的積極前瞻:
      • \S* - 0+非空白字符,然後用
      • [^\w\s] - 不是一個字或空白
    • \S+以外的字符 - 匹配1+非空白字符

    IDEONE demo

    $re = '~(?=(?:\S*[^\w\s]){2,})\S+~'; 
    $str = "you he==rt are my heart 4++5=9 9-8===1 hyphenated-word"; 
    preg_match_all($re, $str, $matches); 
    print_r($matches[0]); // Array([0] => he==rt [1] => 4++5=9 [2] => 9-8===1) 
    
    +0

    對於只有一個特殊字符的單詞怎麼樣?根據我對OP的理解,它只能匹配超過1個特殊字符的單詞。 –

    +0

    好吧,這不是問題,只需添加一個量化的組。 ['(=(?:?\ S * [^ \ W \ S]){2})\ S +'](https://regex101.com/r/tL9pF8/3)。實際上,這也取決於這些應該出現在哪些上下文中。因此,[:\ b(?:\ S * [^ \ w \ s]){2} \ S * \ b'](https:// regex101。 com/r/tL9pF8/4)也可以是有效的(如果特殊字符只應該在單詞字符中) –

    +0

    謝謝,謝謝,感謝WiktorStribiżew這麼多! – hunghvq

    相關問題