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条)

报告相同问题?

悬赏问题

  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥15 复杂网络,变滞后传递熵,FDA