English 中文(简体)
替换第一种插手法中未在标的之间
原标题:Replace the first occurence of string that is not between quote tags in PHP

我想要把扼杀(“[TOREPLACE]”)的首例出现在一个论坛的岗位上,但只有在这种扼杀不是用纸面法标的环绕的情况下。

我的法典:

if($firstpos = strpos($post[ pagetext ],  [TOREPLACE] ) !== false){

    //check for quote
    if($quote_start = strpos($post[ pagetext ],  [QUOTE ) !== false && $quote_end = strpos($post[ pagetext ],  [/QUOTE] ) !== false){
        //quote found
        //check if quote starts before egg
        if($quote_start < $firstpos && $firstpos < $quote_end){

            //don t replace, because the string that is to be replace is in between quotes
        }
    }

    $post[ pagetext_html ] = preg_replace( ~[TOREPLACE]~i ,  <img src="/src.jpg" border="0" /> , $post[ pagetext_html ], 1);

}

I would have to loop this to find the first occurence of the string that is not between quotes. This quote check is tedious and not very elegant. Does anybody know of a better algorithm to do the above?

Algorithm: If quotes in post——发现并替换在报价标之间不存在的第一种情况。 如无引言,取代第一种情况:>

Maybe I could add all this to the pre_match. The quotes are optional, though, and I don t know how to do it.

最佳回答

略微多出一些引文:

// for clarity, START and END are used instead of the actual (un)quote pattern

$input = "test text START quoted text END more text START quoted again END.";
$parts = preg_split("/(START.+?END)/",$input,-1,PREG_SPLIT_DELIM_CAPTURE);

// $parts is an array containing quoted parts at odd indexes
print_r($parts);

产出:

Array
(
    [0] => test text 
    [1] => START quoted text END
    [2] =>  more text 
    [3] => START quoted again END
    [4] => .
)

Then loop over the $parts and only change the even indexes. After that:

$output = implode($parts);
问题回答

暂无回答




相关问题
Simple JAVA: Password Verifier problem

I have a simple problem that says: A password for xyz corporation is supposed to be 6 characters long and made up of a combination of letters and digits. Write a program fragment to read in a string ...

Case insensitive comparison of strings in shell script

The == operator is used to compare two strings in shell script. However, I want to compare two strings ignoring case, how can it be done? Is there any standard command for this?

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

String initialization with pair of iterators

I m trying to initialize string with iterators and something like this works: ifstream fin("tmp.txt"); istream_iterator<char> in_i(fin), eos; //here eos is 1 over the end string s(in_i, ...

break a string in parts

I have a string "pc1|pc2|pc3|" I want to get each word on different line like: pc1 pc2 pc3 I need to do this in C#... any suggestions??

Quick padding of a string in Delphi

I was trying to speed up a certain routine in an application, and my profiler, AQTime, identified one method in particular as a bottleneck. The method has been with us for years, and is part of a "...