एक regex पैटर्न के लिए नहीं प्रतिबंध को लागू करने

वोट
0

मैं उपयोग preg_replace_callbackके पैटर्न के साथ

preg_replace_callback('/^(word1 .*),(.*)\./i',
function($m){
processing $m[1] and $m[2]
}, $str);

के साथ एक वाक्य शुरू मिलान करने के लिए word1। मैं पैटर्न पैटर्न के दूसरे शब्द के लिए कोई प्रतिबंध बनाने के लिए संशोधित कर सकते हैं?

पहले मैच से ऊपर साथ शुरू करना चाहिए word1, जब तक कि word2,word3,etcदूसरा शब्द नहीं हैं।

मैं परिवर्तन करने के लिए नहीं करना चाहते हैं $m[1]और $m[2]सिर्फ मैच के लिए जब, word2,word2,etcस्ट्रिंग में दूसरा शब्द है।

यह मैच चाहिए,

word1 something, and more.

लेकिन नहीं

word1 word2 something, and more.
word1 word3 something, and more.
20/10/2018 को 13:42
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
2

आप लाइनों जो के साथ शुरू मेल करना चाहते हैं word1, लेकिन word2और word3लाइन में और कहीं भी नहीं होती है, तो आप एक नकारात्मक अग्रदर्शी अभिकथन उपयोग करने का प्रयास कर सकते हैं:

^word1(?!.*\b(?:word2|word3)\b).*$

डेमो

(?!.*\b(?:word2|word3)\b)अवधि का दावा है कि हम नहीं दिख रहा है word2या word3लाइन के शेष में कहीं और स्टैंडअलोन शब्दों के रूप में।

यहाँ वास्तविक PHP कोड है:

preg_replace_callback('/^(word1(?!.*\b(?:word2|word3)\b).*),(.*)\./i',
    function($m) {
        # processing $m[1] and $m[2]
    }, $str);

ज्यादा वास्तव में, सिवाय इसके कि मुझे यकीन है कि बनाने के लिए एक नकारात्मक अग्रदर्शी डाला, इसके बाद के संस्करण कोड में बदल जाता है word2और word3नहीं होती है।

20/10/2018 को 13:51
का स्रोत उपयोगकर्ता

वोट
1

आप उपयोग कर सकते हैं: ^(word1\s(?!word2|word3).+)\,\s?(.+)$

डेमो

20/10/2018 को 13:59
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more