dongmiao260399 2014-01-07 15:30
浏览 54
已采纳

修剪PHP正则表达式中的子字符串

I have a string which may contain a pattern like:

LINK([anchor text],[link])

What I would like to do is transform this expression into a HTML link:

<a href="link">anchor text</a>

At the moment, I'm performing the replacement with the following PHP snippet:

$string = 'LINK(  some anchor text    ,   http://mydomain.com  )';
$search = '/LINK\s*\(\s*(.+),\s*([^\s]+)\s*\)/';
$replace = '<a href="$2">$1</a>';
preg_replace($search, $replace, $string);

The problem I'm facing are the spaces after the anchor text. Fortunately, in HTML multiple spaces are interpreted as a single space, but in this example I would however show a link with a (underlined) annoying space. Is there any way to trim this anchor text? I can't treat it as the "link" substring, since it may contain spaces.

  • 写回答

3条回答 默认 最新

  • dttl3933 2014-01-07 15:37
    关注

    Assuming that the anchor text cannot contain commas or more than 1 space in a row, you could perhaps use:

    LINK\s*\(\s*([^\s,]+(?:\s[^\s,]+)*)\s*,\s*(\S+)\s*\)
    

    regex101 demo

    Instead of .+, I'm using [^\s,]+(?:\s[^\s,]+)* which will match one word, and more words separated by space (where a word is a series of non-space characters with at least one character).

    Also changed your negated class [^\s] which appears later on to \S.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?