我正在寻找Php中的正则表达式,它可以像这样转换传入的字符串:
abaisser_negation_pronominal_question => abaisser_n_p_q
abaisser_pronominal_question => abaisser_p_q
abaisser_negation_question => abaisser_n_q
abaisser_negation_pronominal => abaisser_n_p
abaisser_negation_voix_passive_pronominal => abaisser_n_v_p_p
abaisser => abaisser
Php代码接近于:
$line=preg_replace("/<h3>/im", "", $line);
你会怎么做?
答案 0 :(得分:2)
您可以使用:
$input = preg_replace('/(_[A-Za-z])[^_\n]*/', '$1', $input);
<强>解释强>
(_[A-Za-z])[^_\n]*
,表示下划线后跟单个字母,然后在换行符或下划线之前匹配(_[A-Za-z])
$1
$1
,在替换字符串中留下下划线和第一个字母答案 1 :(得分:0)
$line = preg_replace("/_([a-z])([a-z]*)/i", "_$1", $line);
答案 2 :(得分:0)
您可以使用正则表达式
$input = preg_replace('/_(.)[^\n_]+/', '_$1', $input);
它的作用是在_
之后捕获角色并匹配,直到遇到\n
或_
并替换为_$1
,这意味着_
加上捕获的角色。
答案 3 :(得分:0)
您可以使用\K
或正面的背后隐藏。
$input = preg_replace('~_.\K[^_\n]*~', '', $input);
上述正则表达式中的模式_.
将匹配_
以及下划线后面的字符。 \K
会丢弃先前匹配的字符_
加上以下字符。它不会考虑这两个字符。现在[^_\n]*
匹配任何字符,但不匹配_
或\n
换行符的零次或多次。因此,以下划线开头的字符后面的字符将与下一个_
或\n
字符匹配。删除这些字符将为您提供所需的输出。
$input = preg_replace('~(?<=_.)[^_\n]*~', '', $input);
它只关注_
和_
后面的字符,并匹配下一个下划线或换行符的所有字符。