Bir köşeli ayraç içeren bir dize bulmak için nasıl?

2 Cevap php

Ben bir metnin anahtar bir grup aramak için normal bir ifade kullanıyorum.

[DAM] Berlin: tüm anahtar kelimeler ama biri bulunur. Ben o yüzden o kaçtı, ama yine de, hiçbir şans kare ayraç biliyorum. Ben yanlış ne yapıyorum?

İşte benim php kodudur.

Anahtar kelime aramak için metni:

$textToSearch= '<p><br>
Time ¦ emit LAb[au] <br>
<br>
[DAM]Berlin gallery<br>
<br>
Exhibition: February 21st - March 28th, 2009 <br>
<br>
Opening: Friday,  February 20th, 2009 7-9 pm <br>';

Düzenli ifade:

$find='/(?![^<]+>)\b(generative art console|Game of Life|framework notations|framework|Floating numbers|factorial|f5x5x3|f5x5x1|eversion|A-plus|16n|\[DAM\]Berlin gallery)\b/s';

değiştirin Geri arama fonksiyonu:

function replaceCallback( $match )
{
      if ( is_array( $match ) )
      {
    	$htmlVersion = htmlspecialchars( $match[1], ENT_COMPAT, 'UTF-8' );
    	$urlVersion  = urlencode( $match[1] );
    	return '<a class="tag" rel="tag-definition" title="Click to know more about ' . $htmlVersion . '" href="?tag=' . $urlVersion. '">'. $htmlVersion  . '</a>';
      }
      return $match;
}

ve nihayet, çağrı:

$tagged_content = preg_replace_callback($find, 'replaceCallback',  $textToSearch);

Yardımlarınız için teşekkür ederiz!

2 Cevap

I [ "word karakter" değil, yani \b[ [ [DAM]Berlin başında maç olamaz çünkü düşünüyorum . Muhtemelen için regex değiştirmeniz gerekir:

$find='/(?![^<]+>)(\b(?:generative art console|Game of Life|framework notations|framework|Floating numbers|factorial|f5x5x3|f5x5x1|eversion|A-plus|16n)|\[DAM\]Berlin gallery)\b/s';


Edit: Daniel James'in Yorumlarınız Gönderen:

Hala '[Dam]' bir kelime karakteri takip edip etmediğini kontrol edecek gibi bu, orijinal niyet yakın olabilir:

$find='/(?![^<]+>)(?<!\w)(generative art console|Game of Life|framework notations|framework|Floating numbers|factorial|f5x5x3|f5x5x1|eversion|A-plus|16n|\[DAM\]Berlin gallery)\b/s';

Lütfen Regex ilk bölümü '/ (?! [^ <] +>) \ B' bir '>' karakteri oldu önce eğer öyleyse sadece "[DAM] Berlin galerisi" maç değil mi?

deneyin:

$find='/(?![^<]+>)\b(generative art console|Game of Life|framework notations|framework|Floating numbers|factorial|f5x5x3|f5x5x1|eversion|A-plus|16n|\[DAM\]Berlin gallery)\b/sm'

Yeni satırları görmezden böylece sizin regex için m değiştirici ekler

http://www.phpro.org/tutorials/Introduction-to-PHP-Regex.html#8

"[the m modifier] treats a string as having only a single newline character at the end, even if there are multiple new lines in our string."