繁体   English   中英

我需要修改PHP降价的正则表达式的帮助

[英]I need help modifying a regular expression for PHP markdown

我正在修改PHP Markdown (用于Stack Overflow的标记语言的PHP解析器),试图实现Jeff在此博客文章中描述的点1、2和3。 我已经轻松完成了最后两个,但是事实证明这很困难:

  1. 删除了对单词内强调(如like_this_example)的支持

example. 实际上,在“正常”降价实现中,like_this_example将像示例一样呈现。 这是非常不可取的。 我只希望_example_成为example

我查看了源代码,发现用于强调的正则表达式:

var $em_relist = array(
    ''  => '(?:(?<!\*)\*(?!\*)|(?<!_)_(?!_))(?=\S|$)(?![.,:;]\s)',
    '*' => '(?<=\S|^)(?<!\*)\*(?!\*)',
    '_' => '(?<=\S|^)(?<!_)_(?!_)',
    );
var $strong_relist = array(
    ''   => '(?:(?<!\*)\*\*(?!\*)|(?<!_)__(?!_))(?=\S|$)(?![.,:;]\s)',
    '**' => '(?<=\S|^)(?<!\*)\*\*(?!\*)',
    '__' => '(?<=\S|^)(?<!_)__(?!_)',
    );
var $em_strong_relist = array(
    ''    => '(?:(?<!\*)\*\*\*(?!\*)|(?<!_)___(?!_))(?=\S|$)(?![.,:;]\s)',
    '***' => '(?<=\S|^)(?<!\*)\*\*\*(?!\*)',
    '___' => '(?<=\S|^)(?<!_)___(?!_)',
    );

我试图在Regex Buddy中打开它,但还不够,在花了半小时的时间后,我仍然不知道从哪里开始。 有什么建议么?

有些人在遇到问题时会认为“我知道,我会使用正则表达式”。 现在他们有两个问题。

我也使用RegexBuddy。 :)

您可能需要尝试以下代码:

<?php

$line1 = "like_this_example";
$line2 = "I want only _example_ to become example";
$pattern = '/\b_(?P<word>.*?)_\b/si';

if (preg_match($pattern, $line1, $matches))
{
  $result = $matches['word'];
  var_dump($result);
}

if (preg_match($pattern, $line2, $matches))
{
  $result = $matches['word'];
  var_dump($result);
}

?>

我只能通过以下方式获取单个_enclosed_单词:

$input = 'test of _this_ vs stuff_like_this...and here is _anothermatch_ and_another_fake_string';
$pattern = '#(?<=\s|^)(?<!_)(_[^_]*_)(?!_)#is';
preg_match_all($pattern, $input, $matches);
print_r($matches);

我不确定这到底适合上面的代码。 您可能需要将其与下面的其他模式配对,以解决两个和三个匹配情况:

$pattern = '#(?<=\s|^)(?<!_)(__[^_]*__)(?!_)#is';
$pattern = '#(?<=\s|^)(?<!_)(___[^_]*___)(?!_)#is';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM