मैं स्ट्रिंग में सभी मिलान करने के लिए preg_match_all का उपयोग कर रहा हूं

$match_this = '/cola/';
$sentence = 'cola this cola is a nice cola';

if(preg_match_all($match_this, $sentence, $matches)){
  echo 'match found'.'<br>';
  print_r($matches[0]);
}

लेकिन मैं चाहता हूं कि जब मैं अच्छा शब्द का सामना करता हूं तो यह मैच प्रदर्शन ऑपरेशन बंद हो जाता है और $matches सरणी उसके बाद किसी भी अधिक मिलान वाले शब्द को संग्रहीत नहीं करना चाहिए।

इसके लिए कोड को कैसे संशोधित किया जा सकता है?

'अच्छा' से पहले 'कोला' कई बार आता है। यह सिर्फ एक उदाहरण वाक्य है। फिर से 'कोला' और 'नाइस' सिर्फ उदाहरण शब्द हैं। मिलान करने के लिए शब्द और कहां रुकना है डेटाबेस से यादृच्छिक रूप से चुने जाते हैं। यह कोड वर्ड गेम के लिए है।

1
Gissipi_453 23 अक्टूबर 2016, 18:41

2 जवाब

सबसे बढ़िया उत्तर

पहले अच्छा की ऑफसेट प्राप्त करें, फिर इसके पहले सबस्ट्रिंग पर प्रीग मैच चलाएं।

$sentence = 'cola this cola is a nice cola';

$match_this = '/nice/';
if(preg_match($match_this, $sentence, $matches, PREG_OFFSET_CAPTURE)){
    $niceOffset = $matches[0][1];
    $match_this = '/cola/';
    if(preg_match_all($match_this, substr($sentence, 0, $niceOffset), $matches2, PREG_OFFSET_CAPTURE)){
      var_dump($matches2);
    }
}
2
brianxautumn 23 अक्टूबर 2016, 20:34

आप सकारात्मक आगे की ओर देखें का उपयोग कर सकते हैं:

$match_this = '\bcola\d\b';
$until = '\bnice\b';
$sentence = 'cola1 this cola2 is a nice cola3';

if(preg_match_all("/$match_this(?=.*$until)/", $sentence, $matches)){
  print_r($matches[0]);
}

आउटपुट:

Array
(
    [0] => cola1
    [1] => cola2
)

मैंने यह सुनिश्चित करने के लिए प्रत्येक cola के अंत में एक संख्या जोड़ी है कि यह केवल उन संख्याओं से मेल खाती है जो शब्द nice से पहले हैं।

मैंने मिलान करने के लिए शब्दों के चारों ओर शब्द बौडरी भी जोड़े हैं।

अंत में कोड है:

$match_this = '\bcola\b';
$until = '\bnice\b';
$sentence = 'cola this cola is a nice cola';

if(preg_match_all("/$match_this(?=.*$until)/", $sentence, $matches)){
  print_r($matches[0]);
}
3
Toto 24 अक्टूबर 2016, 14:47