php中正则表达式匹配字符串并输出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php中正则表达式匹配字符串并输出相关的知识,希望对你有一定的参考价值。

$text1='phpSESSID s553nnl2dds7d0csg0g3ltnnl5 TIME 130000789'; //间隔为'\t' $text2='USERID 80093'; //间隔为'\t' 怎样用正则表达式分别取出s553nnl2dds7d0csg0g3ltnnl5和80093?

参考技术A 用explode更方便,例如:
$str=".....\t分割的字符串";
list($t,$r)=explode("\t",
$str);
echo
$r;
上面的$t是用来占位的,代码执行后$r就是我们需要的第二个字段值

在正则表达式中匹配字符串中的数字并转换为整数[重复]

【中文标题】在正则表达式中匹配字符串中的数字并转换为整数[重复]【英文标题】:Matching numbers in strings in regex and converting into integers [duplicate] 【发布时间】:2018-09-04 23:31:16 【问题描述】:

我正在尝试使用 re.findall() 匹配给定文本正文中的所有数字并将它们转换为整数。我知道[0-9]+[\d]+ 之类的东西应该匹配字符串中的任何数字,但是,我的输出会单独拆分数字(例如,'125' 变为'1'、'2'、'5'。

这是我所拥有的:

import re

regex_list = []

sample = "Here are a bunch of numbers 7746 and 12 and 1929 and 8827 and 7 and 8837 and 128 now convert them"

for line in sample:
    line = line.strip()
    if re.findall('([0-9]+)', line):
        regex_list.append(int(line))
print(regex_list)

输出:

[7, 7, 4, 6, 1, 2, 1, 9, 2, 9, 8, 8, 2, 7, 7, 8, 8, 3, 7, 1, 2, 8]

期望的输出:

[7746, 12, 1929, 8827, 7, 8837, 128]

【问题讨论】:

问题不在于正则表达式,问题在于您的for 循环。看看line 的值...(顺便说一句,这应该是调试此问题的首要任务之一。) 好的,感谢您的澄清,我不知道使用 for 循环会产生这种效果 【参考方案1】:

for line in sample 将单个字符存储在 line 中,直到您的 sample 是行列表

【讨论】:

【参考方案2】:

查看@chrisz's answer 以获得更好的解决方案。

但是,如果你想知道你的问题是什么:

使用for 循环遍历字符串会得到单个字符,而不是你想象的单词。要获取单词,您必须使用split()

regex_list = []

sample = "Here are a bunch of numbers 7746 and 12 and 1929 and 8827 and 7 and 8837 and 128 now convert them"

for line in sample.split():
    line = line.strip()
    if re.findall('([0-9]+)', line):
        regex_list.append(int(line))

print(regex_list)
# [7746, 12, 1929, 8827, 7, 8837, 128]

但是,由于您是单独获取单词,因此无需使用正则表达式。您可以直接联系我们isdigit()

for line in sample.split():
    line = line.strip()
    if line.isdigit():
        regex_list.append(int(line))

或者,简单地使用列表推导:

num_list = [int(word) for word in sample.split() if word.isdigit()]
print(num_list)
# [7746, 12, 1929, 8827, 7, 8837, 128]

【讨论】:

【参考方案3】:

您的问题是您当前正在逐个字符地循环,而您实际上可以将正则表达式应用于整行。

>>> import re    
>>> s = "Here are a bunch of numbers 7746 and 12 and 1929 and 8827 and 7 and 8837 and 128 now convert them"
>>> [int(j) for j in re.findall(r'[0-9]+', s)]
[7746, 12, 1929, 8827, 7, 8837, 128]

【讨论】:

以上是关于php中正则表达式匹配字符串并输出的主要内容,如果未能解决你的问题,请参考以下文章

C# 正则表达式匹配案例 - 拆分字符串并写入文件输出

PHP 正则表达式匹配 preg_match 与 preg_match_all 函数

PHP中如何匹配多个满足正则表达式的字符串

PHP中正则表达式匹配字母

如何使用正则表达式匹配四个数字字段或文本字符串

php中文正则匹配